0

サンプルの Android アプリには 2 つのボタンがあります。ボタンをランダムに選択し、その背景画像を黄色に変更して 4 秒間表示したいと考えています。4秒後、背景画像を(青に)変更して4秒間表示したいと思います。ここで、ボタンのランダム選択のプロセスを繰り返し、上で述べたようにランダムに選択されたボタンで同じことを行います。

いくつかのコードを開発しました。個々のボタンのコードをテストすると正常に動作しますが、両方のボタンを実行すると、それに応じて動作しません。

私を助けてください、私はあなたにとても感謝しています。私のコードを wl... として確認できます。

int mainCount =0;// mainCount- could be a random number
int count_1 =0;
int count_2 =0;

public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.mlayout);

    mainHandler = new Handler();
    mHandler1 = new Handler();
    mHandler2 = new Handler();
            .
            .
            .
    mainRunnable.run();
}

Runnable mainRunnable = new Runnable(){

     public void run(){       
         mainHandler.postDelayed(new Runnable(){
             public void run(){
                 switch(mainCount){
                     case 0: 
                         runButton1.run();
                         mainCount++; // mainCount- could be a random number to select a button randomly
                         break;

                      case 1:
                         runButton2.run();
                         mainCount++;// mainCount- could be a random number to select a button randomly
                         break;
                    }

                    if(count==2)
                      mainCount =0;

                    mainHandler.postDelayed(this,4000);
                }
            }, 4000);
        }
    };


Runnable runButton1 =new Runnable(){

        public void run(){
            mHandler1.postDelayed(new Runnable(){
                public void run(){
                    switch(count_1){
                        case 0:
                            button1.setBackgroundResource(R.drawable.buttonyellow);
                            count_1++;
                            break;
                     case 1:
                            button1.setBackgroundResource(R.drawable.buttonblue);
                            count_1++;
                            break;                    
                     }

                    if(count_1==2)
                        count_1 = 0;

                    mHandler1.postDelayed(this,4000);
                }
            }, 4000);
        }
    };


    Runnable runButton2 =new Runnable(){
        public void run(){
            mHandler2.postDelayed(new Runnable(){
                public void run(){
                    switch(count_2){
                        case 0:
                            button2.setBackgroundResource(R.drawable.buttonyellow);
                            count_2++;
                            break;
                        case 1:
                            button2.setBackgroundResource(R.drawable.buttonblue);
                            count_2++;
                            break;                    
                    }

                   if(count_2==2)
                    count_2 = 0;

                   mHandler2.postDelayed(this,4000);
                }
            }, 4000);
        }
    };
4

1 に答える 1

1

まず、複数の は必要ありませんHandler。1 つあれば十分です。第 2 に、別の内部実行可能オブジェクトを実行するために呼び出しているmainRunnable.run()ためonCreate、これは単なるメソッドであることに適しています。とにかく、これが私の見解です:

public class MyActivity extends Activity {

    private Runnable mEndlessRunnable;

    @Override
    public void onCreate(Bundle savedState) {
        super.onCreate(savedState);
        setContentView(R.layout.my_activity);

        mEndlessRunnable = new UpdateRunnable(new Handler(), new Button[] {
            (Button) findViewById(R.id.button_1),
            (Button) findViewById(R.id.button_2)
        });
        mEndlessRunnable.run();

    }

    private static class UpdateRunnable extends Runnable {

        private Random mRand = new Random();
        private Handler mHandler;
        private Button[] mButtons;

        private Button mCurButton;
        private int mState;

        public UpdateRunnable(Handler handler, Button[] buttons) {
            mHandler = handler;
            mButtons = buttons;
        }

        public void run() {
            // select a button if one is not selected
            if (mCurButton == null) {
                mCurButton = mButtons[mRand.nextInt(mButtons.length)];
            }
            // check internal state, `0` means first bg change, `1` means last
            switch (mState) {
            case 0:
                mCurButton.setBackgroundResource(R.drawable.blue_bg);
                mState = 1;
                break;
            case 1:
                mCurButton.setBackgroundResource(R.drawable.yellow_bg);
                // reset state and nullify so this continues endlessly
                mState = 0;
                mCurButton = null;
                break;
            }

            mHandler.postDelayed(this, 4000);
        }
    }
}

上記をテストしていませんが、参考として上記を使用します。楽しみ

于 2012-09-30T17:45:49.523 に答える