java - 在 Activity 中使用 Thread 计算整数并在 View 中更新 Canvas

标签 java android multithreading android-canvas

我正在开发我的第一个 Android 游戏,没有用于 Eclipse 布局的 xml 文件。这是从 MyGameActivity.class(extends View Implements OnTouchListener) 调用 MyGameView.class(extends View)

 MyGameView myView;
 myView = new MyGameView(this);
 myView.setOnTouchListener(this);
 setContentView(myView);

每次触摸 (MotionEvent.ACTION_DOWN) 时,我都会使用以下代码更新 MyGameView.class 中的 Canvas。这是我用来从 MyGameActivity.class 更新 MyGameView.class 的代码。

 myView.invalidate();

是的,它有效!但我现在遇到了一个严重的问题。我需要每 0.3 秒移动一次 MyGameView.class 中的 Canvas。我使用 Thread 进行更新,但它强制停止!!!!我尝试了一次又一次!我失败了!

 public void runtime() {
 i = 0;
 Thread timer = new Thread(new Runnable() {

    @Override
    public void run() {
        while (i<1500) {
            try {
                 Thread.sleep(300);
            }
            catch (InterruptedException e) {
                 e.printStackTrace();
            }
            finally {
                 if (right) {
                     i++;
                     //This is static int a from MyGameView.            
                     MyGameView.a += 2;
                     myView.invalidate();
                 }
                 else {
                     i = 1500;
                 }
             }
       }
  }
});
timer.start();

}

使用 myView.invaldate() 将静态 int 或 boolean 从 MyGameActivity.class 更新为 MyGameView.class;工作中。但我无法用Thread来控制它!我的线程运行代码有问题吗?

这可能取决于线程,因为每次按下 (MotionEvent.ACTION_DOWN) 时我都可以沿 X 轴向右移动 +2。

 //I can Move with this code but not with Thread!
 case MotionEvent.ACTION_DOWN:
      MyGameView.a += 2;
      myView.invalidate();
 break;

有了Thread,它就停止了!请给我一个解决方案!换句话说,我需要准确无误地计算时间,并在每次计数时更新 Canvas !

最佳答案

必须从 UI 线程调用 Invalidate。尝试调用

postInvalidate()

相反。

参见this供引用。

关于java - 在 Activity 中使用 Thread 计算整数并在 View 中更新 Canvas,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36722254/

相关文章:

android - 调用的第三个 Activity 将其结果返回给第一个 Activity 而不是将结果发送给第二个 Activity ?

c# - 有一个方法直接编辑作为参数传递的变量吗?

java - 好奇的Spring AOP异常

java - 在类实例垃圾收集之前调用 Scanner#close() ?

java - 使用 Java http 请求进行 Twitch 身份验证

android - 处理 ImageView 中的可点击区域

android - 使用 Glide : Can't call reconfigure() on a recycled bitmap 加载图像时遇到错误

java多线程未利用所有核心

java - 如何让线程等待另一个类的方法完成

javascript - Spring 和 Angular - 非常简单的 REST 请求