1

我有一个自定义视图,其中添加了一个名为 moveView 的方法,该方法在调用时将视图的位置更改为 Y 方向上的 X 像素。现在我想让其中的 6 个视图遍布整个屏幕并不断移动。

我有的:

  1. Handler(我需要它来更新 UI 吗?)
  2. ApplyMoveRunnable(实现 Runnable。构造函数接收自定义视图、要移动的像素数量以及它将移动的方向)
  3. 6 个线程(每个视图一个)
  4. 6 MoveCalcRunnable(每个线程一个。实现 Runnable)

我尝试了什么:我尝试创建 6 个视图,然后创建 6 个线程。这些线程中的每一个都MoveCalcRunnable在各自的视图中调用 moveView() 方法。这个 moveView() 方法计算视图将移动的像素数量和它将移动的方向,并将此信息发送到.ApplyMoveRunnable然后调用handler.post(applyMoveRunnable).

简单地说,发生的事情是这样的:

  1. 实例化ApplyMoveRunnable applyMoveRunnable
  2. 实例化Handler handler.
  3. 实例化 6MoveCalcRunnable的。
  4. 创建 6 个线程,每个视图一个,每个持有一个MoveCalcRunnable.
  5. 启动所有线程。

当我运行它时,起初我看到了我的 6 个视图,但随后一个移动,没有其他任何事情发生。

这是我的每个的 run() 方法MoveCalcRunnable

    @Override
    public void run() {
            Log.e(tag, "Thread locking directionAmountRunnable.");
            synchronized (applyMoveRunnable) {
                Log.e(tag, "Moving view.");
                myView.moveView();
        }
    }

任何人都可以帮我解决这个问题吗?或者建议一种更好、更简单和/或更有效的方法?

4

0 回答 0