0

我的示例 Android 应用程序中有两个按钮。我想随机选择一个按钮并将其背景图像更改为黄色并显示 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

首先,你不需要多个Handlers,一个就足够了。其次,您正在调用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 回答