在函数中间更改btn资源

时间:2018-01-05 14:37:59

标签: android button thread-sleep

我正在尝试在玩家移动和计算机移动之间创建一个小暂停(当选择的情况属于大小写时调用游戏: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());
}

非常感谢!

1 个答案:

答案 0 :(得分:1)

在主线程中将控件返回到Looper之前,不会发生Android中的绘制。它们不会立即发生。所有setText都会使视图无效,这将告诉我们来自looper的下一个draw命令它需要重绘自己。

另外,永远不要睡在主线程上。由于上述原因,主线程上的睡眠会使您的应用无响应。