我有一个自定义视图,其中添加了一个名为 moveView 的方法,该方法在调用时将视图的位置更改为 Y 方向上的 X 像素。现在我想让其中的 6 个视图遍布整个屏幕并不断移动。
我有的:
Handler
(我需要它来更新 UI 吗?)ApplyMoveRunnable
(实现 Runnable。构造函数接收自定义视图、要移动的像素数量以及它将移动的方向)- 6 个线程(每个视图一个)
- 6
MoveCalcRunnable
(每个线程一个。实现 Runnable)
我尝试了什么:我尝试创建 6 个视图,然后创建 6 个线程。这些线程中的每一个都MoveCalcRunnable
在各自的视图中调用 moveView() 方法。这个 moveView() 方法计算视图将移动的像素数量和它将移动的方向,并将此信息发送到.ApplyMoveRunnable
然后调用handler.post(applyMoveRunnable)
.
简单地说,发生的事情是这样的:
- 实例化
ApplyMoveRunnable applyMoveRunnable
- 实例化
Handler handler
. - 实例化 6
MoveCalcRunnable
的。 - 创建 6 个线程,每个视图一个,每个持有一个
MoveCalcRunnable
. - 启动所有线程。
当我运行它时,起初我看到了我的 6 个视图,但随后一个移动,没有其他任何事情发生。
这是我的每个的 run() 方法MoveCalcRunnable
:
@Override
public void run() {
Log.e(tag, "Thread locking directionAmountRunnable.");
synchronized (applyMoveRunnable) {
Log.e(tag, "Moving view.");
myView.moveView();
}
}
任何人都可以帮我解决这个问题吗?或者建议一种更好、更简单和/或更有效的方法?