我正在尝试在玩家移动和计算机移动之间创建一个小暂停(当选择的情况属于大小写时调用游戏:1)。问题是,在我的调试中,我看到我的按钮资源一起变化,并且仅在游戏功能结束时,在播放器和计算机播放之后。我预计在“drawTheMove”之后,btn会发生变化。
public void game(Point p, Button btn) {
switch (turn % numOfplayers) {
case 0: {
if (!checkIfGotWinner()) {
if (isValid(p)) {
addChoice(p);
drawTheMove(btn);
turn++;
if(!isHuman2) {
getUserClicks = false;
comp.playYourGameBitch(this);
}
}
}
break;
}
case 1: {
if (!checkIfGotWinner() && isValid(p)) {
try {
Thread.sleep(400);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
addChoice(p);
drawTheMove(btn);
getUserClicks = true;
turn++;
}
checkIfGotWinner();
break;
}
}
}
drawTheMove:
public void drawTheMove(Button btn) {
btn.setText(Integer.toString(getNumOfClick()));
Player player = getLastPlayerPlay();
btn.setBackgroundResource(player.getImageId());
}
非常感谢!
答案 0 :(得分:1)
在主线程中将控件返回到Looper之前,不会发生Android中的绘制。它们不会立即发生。所有setText都会使视图无效,这将告诉我们来自looper的下一个draw命令它需要重绘自己。
另外,永远不要睡在主线程上。由于上述原因,主线程上的睡眠会使您的应用无响应。