1

呼び出されたときにビューの位置を Y 方向に X ピクセルずつ変更する moveView という名前のメソッドが追加されたカスタム ビューがあります。ここで、これらのビューを 6 つ画面全体に広げて、常に動かしたいと考えています。

私が持っているもの:

  1. Handler(UI の更新に必要ですか?)
  2. ApplyMoveRunnable(Runnable を実装します。コンストラクターは、カスタム ビュー、移動するピクセルの量、および移動する方向を受け取ります)
  3. 6 つのスレッド(ビューごとに 1 つ)
  4. 6 MoveCalcRunnable(スレッドごとに 1 つ。Runnable を実装)

試したこと: 6 つのビューを作成してから、6 つのスレッドを作成してみました。これらの各スレッドMoveCalcRunnableは、それぞれのビュー内で moveView() メソッドを呼び出します。この moveView() メソッドは、ビューが移動するピクセル数と移動方向を計算し、この情報を に送信してApplyMoveRunnableから を呼び出しますhandler.post(applyMoveRunnable)

簡単に言えば、何が起こるかは次のとおりです。

  1. インスタンス化ApplyMoveRunnable applyMoveRunnable
  2. インスタンス化しHandler handlerます。
  3. 6 をインスタンス化しMoveCalcRunnableます。
  4. ビューごとに 1 つずつ、6 つのスレッドを作成し、それぞれがMoveCalcRunnable.
  5. すべてのスレッドを開始します。

これを実行すると、最初は 6 つのビューが表示されますが、その後 1 つが移動し、他に何も起こりません。

my のそれぞれの run() メソッドは次のMoveCalcRunnableとおりです。

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

誰でもこれを機能させるのを手伝ってもらえますか? または、これを行うためのより優れた、よりシンプルな、および/またはより効率的な方法を提案しますか?

4

0 に答える 0