呼び出されたときにビューの位置を Y 方向に X ピクセルずつ変更する moveView という名前のメソッドが追加されたカスタム ビューがあります。ここで、これらのビューを 6 つ画面全体に広げて、常に動かしたいと考えています。
私が持っているもの:
Handler
(UI の更新に必要ですか?)ApplyMoveRunnable
(Runnable を実装します。コンストラクターは、カスタム ビュー、移動するピクセルの量、および移動する方向を受け取ります)- 6 つのスレッド(ビューごとに 1 つ)
- 6
MoveCalcRunnable
(スレッドごとに 1 つ。Runnable を実装)
試したこと: 6 つのビューを作成してから、6 つのスレッドを作成してみました。これらの各スレッドMoveCalcRunnable
は、それぞれのビュー内で moveView() メソッドを呼び出します。この moveView() メソッドは、ビューが移動するピクセル数と移動方向を計算し、この情報を に送信してApplyMoveRunnable
から を呼び出しますhandler.post(applyMoveRunnable)
。
簡単に言えば、何が起こるかは次のとおりです。
- インスタンス化
ApplyMoveRunnable applyMoveRunnable
- インスタンス化し
Handler handler
ます。 - 6 をインスタンス化し
MoveCalcRunnable
ます。 - ビューごとに 1 つずつ、6 つのスレッドを作成し、それぞれが
MoveCalcRunnable
. - すべてのスレッドを開始します。
これを実行すると、最初は 6 つのビューが表示されますが、その後 1 つが移動し、他に何も起こりません。
my のそれぞれの run() メソッドは次のMoveCalcRunnable
とおりです。
@Override
public void run() {
Log.e(tag, "Thread locking directionAmountRunnable.");
synchronized (applyMoveRunnable) {
Log.e(tag, "Moving view.");
myView.moveView();
}
}
誰でもこれを機能させるのを手伝ってもらえますか? または、これを行うためのより優れた、よりシンプルな、および/またはより効率的な方法を提案しますか?