好的,我决定省略任何代码只是因为我认为大多数人都会理解我正在尝试做的事情。
基本上我有一个Layout,一个TextView和一个名为GameGraphics的自定义视图,它们都是在我的Activity的onCreate中以编程方式添加的。 GameGraphics View是一个自定义视图,可以进行所有交互和绘图(基本游戏)。 TextView显示分数或currentPlayer等等信息。
游戏的整个交互发生在GameGraphics的构造函数中,我在其中添加了OnTouchListener,即
this.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_DOWN) {
// ALL GAME LOGIC GOES HERE
}
return true;
}});
现在,我可以让自定义视图用完整个屏幕并将文本反馈绘制到画布上,但是,为了学习的目的,我想使用TextView。所以我正在尝试如何在游戏进行过程中弄清楚如何更改TextView文本,即从GameGraphics自定义View中。所以最终我试图让TextView“监听”自定义的GameGraphics视图,并使用score,currentPlayer等变量重绘自己。
我明白我试图去做它不会起作用...我猜你不能得到一个视图来要求一个不同的视图重绘自己,而视图仍在绘制......或类似的东西。
我真的没有想法。我假设我可能想知道如果有人可以告诉我一些按钮的内容,该怎么办,当按下该按钮时,TextView的文本会改变为其他内容。这最终是我想要做的事情吗?
我会一直在寻找...
答案 0 :(得分:0)
您可以在主Activity中进行游戏逻辑,而不是在GameGraphics类中吗?这样你就可以处理你创建的TextView对象了,并且可以随时在TextView上使用.setText(“你的字符串”)。希望这有帮助,如果我误解了,请告诉我。
答案 1 :(得分:0)
此解决方案归结为使用Java语言元素。我们所做的是创建一个抽象的侦听器类作为控制游戏视图的同一个类的成员。然后在活动中创建该类的实例并实现您创建的抽象方法。
class gameGraphics
{
public abstract class DataListener
{
public abstract void updateScore(String data);
}
private DataListener listener;
public gameGraphics(DataListener listener){
this.listener = listener;
}
private TheMethodThatGetsCalledWhenThingsChange(){
this.listener.updateScore(...DATA....);
}
}
class mainActivity extends Activity
{
@Override
public onCreate(...stuff...){
...on create stuff...
new gameGraphics(new DataListener{
public void updateScore(String data){
...set the listview...
}
});
}
}