在画布中睡觉线程

时间:2012-07-28 02:21:54

标签: java android android-canvas

在我的游戏中,我希望在丢失或赢得关卡后将屏幕画成黑色,然后在屏幕上以白色绘制消息。延迟几秒后,我想让屏幕在触摸时消失。下面是我的draw()方法的一部分。问题是屏幕在屏幕被绘制为黑色并且绘制文本之前冻结(或线程休眠),即使sleep命令在绘制文本和画布之后。任何想法为什么会发生这种情况?

if (state == WIN || state == LOSE){
        canvas.drawColor(Color.BLACK);
        message = "Touch Screen To Start";                                                
        canvas.drawText(message + "", mCanvasWidth / 2, mCanvasHeight / 2, white);
        try {
        GameThread.sleep(500);
        } catch (InterruptedException e) {
        e.printStackTrace();
        }
    }       

3 个答案:

答案 0 :(得分:2)

我觉得canvas函数在返回之前实际上并没有显示任何内容。特别是如果你在Android> 3.0上使用硬件加速或任何具有双缓冲的配置运行,它将不会实际更新屏幕直到它完成。

相反,当您绘制黑屏时,请存储当前时间。类似的东西:

mStartTime = System.currentTimeMillis();

然后在观看按下的功能中,检查已经过了多少秒,看看是否有足够的时间发生,例如:

if( (System.currentTimeMillis() - mStartTime)/1000 > 5){
    //Put code here to run after 5 seconds
}

这应该绘制你的文字并避免阻止Ui线程(在各个方面都是一个大不了)。

答案 1 :(得分:1)

可能是对drawText的调用比你意识到的要花费几分之一秒,并且因为你立即调用了sleep,你实际上是在绘制之前就已经在线程中休眠了。

尝试在睡眠呼叫之前为(i <10000)或其他东西设置一个小循环,看看是否有帮助。

答案 2 :(得分:0)

使用CountDownTimer

 http://developer.android.com/reference/android/os/CountDownTimer.html


 new CountDownTimer(30000, 1000) {

 public void onTick(long millisUntilFinished) {
     mTextField.setText("seconds remaining: " + millisUntilFinished / 1000);
     // Here you do check every second = every 1000 milliseconds
 }

 public void onFinish() {
    // Here you can restart game after 30 seconds which is 30K milliseconds.
     mTextField.setText("done!");
 }
}.start();