java - 在 Canvas 中 hibernate 线程

标签 java android android-canvas

在我的游戏中,我想在输掉或赢得关卡后将屏幕绘制为黑色,然后在屏幕上绘制一条白色消息。延迟几秒钟后,我希望屏幕在触摸时消失。下面是我的draw()方法的一部分。问题是,即使 sleep 命令是在绘制文本和 Canvas 之后,在屏幕被绘制为黑色并绘制文本之前,屏幕会卡住(或线程 hibernate )。有什么想法为什么会发生这种情况吗?

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();
        }
    }       

最佳答案

我有一种感觉,canvas 函数在返回之前实际上不会显示任何内容。特别是如果您在具有硬件加速的 Android >3.0 上运行,或者任何具有双缓冲的配置,则在完成之前它实际上不会更新屏幕。

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

mStartTime = System.currentTimeMillis();

然后在监视按下的函数中,检查已经过去了多少秒并查看是否有足够的时间,例如:

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

这应该绘制您的文本并避免阻塞 Ui 线程(在各个方面都是一个很大的禁忌)。

关于java - 在 Canvas 中 hibernate 线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11697722/

相关文章:

Android 主要 Activity 崩溃 - 致命异常 : main

java - OpenCV Android - 尝试使示例应用程序工作

android - 如何在特定 XY 位置将位图覆盖在另一个位图上

java - 从扫描仪获取字符输入

java - 使用 SeekBar 实时更新屏幕亮度

java - 如何扫描特定目录中具有特定扩展名的文件?

Android 通过 X Y 位置在 Canvas 上绘制位图和按钮

java - 操作图像的内存有效方法?

java - 从 wicket 面板类调用 javascript 或修改 css

java - Spring MVC 表单验证 : how to make field optional?