2012-09-30 58 views
0

我在示例Android應用程序中有兩個按鈕。我想隨機選擇一個按鈕並將其背景圖像(變爲黃色)顯示4秒鐘。現在再過4秒鐘後,我想將背景圖像(藍色)更改爲4秒。現在重複按鈕隨機選擇的過程,並按照我上面所述的隨機選擇按鈕做同樣的操作。如何在Android中4秒後更改按鈕的背景圖像?不工作

我已經開發了一些代碼,當我測試個人按鈕的代碼它工作正常,但是當我運行這兩個按鈕它不工作相應。

請幫助我,我會非常感謝你。你可以檢查我的代碼爲W1 ....

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

嘗試使用'runOnUIThread' – Ronnie

回答

1

首先,你不必多Handler S,一會就好了。其次,您在onCreate中調用mainRunnable.run()來運行另一個內部runnable,因此這將更適合作爲一種方法。無論如何,這是我的看法:

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

我還沒有測試過上述內容,但我會用上面的參考。享受

+0

Thnx很多爲您的答覆,我檢查它,我會將它標記爲投票 – user1703737

+0

謝謝Dskinner!我親切地感謝你的迴應 – user1703737

相關問題