簡體   English   中英

如何在Android中4秒后更改按鈕的背景圖片? 不工作

[英]How to change background image of buttons after 4seconds in android? Not working

我的示例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);
        }
    };

首先,您不需要多個Handler ,一個就足夠了。 其次,您要在onCreate調用mainRunnable.run()來運行另一個內部可運行對象,因此這將更適合用作方法。 無論如何,這是我的看法:

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);
        }
    }
}

我沒有測試以上內容,但可以將以上內容用作參考。 請享用

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM