java - 如何在 for 循环中使用 invalidate()

标签 java android-studio

我想显示我正在开发的游戏的镜头。但 Canvas 在结束时就失效了 我的for循环。这是同样的问题,就像这里 Canvas do not update (invalidate) until whole while loop ends 但答案对我不起作用。 在这种情况下如何使我的 Canvas 无效?:

else if (event.getX() > 1150 && event.getX() < 1300 
          && event.getY() > 550 && event.getY() < 700)
  {
    System.out.println("Schuss");
    final ArrayList<Shot> positions = game.shot(100, 45, canvas);
    new Thread(new Runnable()
    {
        public void run()
        {
            for (int i = 0; i < positions.size(); i++)
            {
                game.setCurrentShot(positions.get(i));
                System.out.println(i);
                canvas.postInvalidate();
            }       
        }
    }).start();
}

在射击函数中,我计算所有位置。镜头将通过,然后我想在 Canvas 上显示这些位置,但这不起作用。

最佳答案

试试这个:

else if (event.getX() > 1150 && event.getX() < 1300 && event.getY() > 550 && event.getY() < 700)
{
    System.out.println("Schuss");
    final ArrayList<Shot> positions = game.shot(100, 45, canvas);
    YourActivity.this.runOnUiThread(new Runnable() {
        public void run() {
            for (int i = 0; i < positions.size(); i++)
            {
                game.setCurrentShot(positions.get(i));
                Log.d("YourApp", "i = "+i);
                canvas.invalidate();
            }
        }
    });
}

关于java - 如何在 for 循环中使用 invalidate(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58341392/

相关文章:

android - 我是否需要在 build.gradle 中添加源集以用于发布/调试 java 源文件夹?

java - Jackson json 映射器

java - Swing 复选框

java - 将 do-while 转换为 Java 中的 for 循环

java - 当我从 Task Scheduler 的 bat 文件中运行 java 程序时,包不存在错误...但是当双击 bat 文件时它会运行

android-studio - Android Studio 创建新文件/类的快捷方式

JavaFX 使用 Smack API (xmpp) 从 Java 回调

android - 用 map 膨胀类 fragment 时出错

java - Android 单击小部件时启动新 Activity

android - 最新 Material 设计版本中的渲染问题 "Path.op() not supported"