2014-07-08 27 views
0

有些專家告訴我爲什麼這段代碼不起作用,目的很簡單,就是在一段時間內改變按鈕的顏色,在那段時間之後,你必須着色返回到原來的顏色。問題是沒有按順序運行,應該是一個按鈕來改變顏色,等待1秒,回到原來的顏色,然後相同的下一個按鈕來完成序列。Android - 改變按鈕的顏色一段時間

對不起我英語不好,並提前致謝。

int temp[] = new int[game.getLevel()]; 
    Handler handler = new Handler(); 
    temp = game.getSequence(); 
    for(int i = 0; i < game.getLevel(); i++) 
    { 
     switch (temp[i]) 
     { 
      case RED: 
       handler.postDelayed(new Runnable() { 
        public void run() { 

           redButton.setBackgroundColor(Color.rgb(255, 0, 0)); 
         } 
        }, 1000); 
       redButton.setBackgroundColor(Color.rgb(109, 0, 0)); 
       break; 

      case GREEN: 

       handler.postDelayed(new Runnable() { 
        public void run() { 
           greenButton.setBackgroundColor(Color.rgb(0, 255, 0)); 
         } 
        }, 1000); 
       greenButton.setBackgroundColor(Color.rgb(0, 109, 0)); 
       break; 
      case YELLOW: 
       handler.postDelayed(new Runnable() { 
        public void run() { 
           yellowButton.setBackgroundColor(Color.rgb(255, 255, 0)); 
         } 
        }, 1000); 
       yellowButton.setBackgroundColor(Color.rgb(109, 109, 0)); 
       break; 
      case BLUE: 
       handler.postDelayed(new Runnable() { 
        public void run() { 
           blueButton.setBackgroundColor(Color.rgb(0, 0, 255)); 
         } 
        }, 1000); 
       blueButton.setBackgroundColor(Color.rgb(0, 0, 255)); 
       break; 
      default: 
       break; 
     } 
    } 
} 

回答

0

您可以使用消息隊列:

static final int RED = 0; 
static final int GREEN = 1; 
static final int YELLOW = 2; 
static final int BLUE = 3; 

mButton.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       mHandler.sendEmptyMessageDelayed(RED, 1000); 
      } 
     }); 

mHandler = new Handler() { 
      @Override 
      public void handleMessage(Message msg) { 
       // TODO Auto-generated method stub 
       switch (msg.what) { 
       case RED: 
        mButton.setBackgroundColor(Color.rgb(255, 0, 0)); 
        mHandler.sendEmptyMessageDelayed(GREEN, 1000); 
        break; 
       case GREEN: 
        mButton.setBackgroundColor(Color.rgb(0, 255, 0)); 
        mHandler.sendEmptyMessageDelayed(YELLOW, 1000); 
        break; 
       case YELLOW: 
        mButton.setBackgroundColor(Color.rgb(255, 255, 0)); 
        mHandler.sendEmptyMessageDelayed(BLUE, 1000); 
        break; 
       case BLUE: 
        mButton.setBackgroundColor(Color.rgb(0, 0, 255)); 
        mHandler.sendEmptyMessageDelayed(RED, 1000); 
        break; 
       } 

      } 
     };