2014-11-25 75 views
0

我正在創建一個Android應用程序,並遇到了問題。等待一秒鐘的按鈕點擊,如果按鈕沒有點擊通話功能

有12個按鈕。一個按鈕是改變顏色,然後用戶有一秒鐘的時間來點擊按鈕,否則按鈕會變回原來的顏色,而不同的按鈕會改變顏色。

我想重複一遍,直到用戶錯過了一定數量的按鈕點擊。

我發現如何做顏色變化,但我不知道如何做一個無限循環在android或如何等待一秒鐘。

感謝您的幫助。這是我在android應用程序中的第一次嘗試。

+0

檢查:http://stackoverflow.com/questions/22606977/how-can-i-get-button-pressed-time-when-i-holding-按鈕開啓 – 2014-11-25 08:21:57

+0

這會更好這個[SO問題](http://stackoverflow.com/questions/1877417/how-to-set-a-timer-in-android)它描述了一個Timer使用和其他選項來重複運行一些操作。 – 2014-11-25 08:25:07

回答

1

您可以通過發佈Runnable對象以在指定延遲的處理程序上運行來實現計時器。如果你不阻止它運行,那麼Runnable會執行。但是,您也可以從之前停止投放:

private static final long ONE_SECOND = 1000L; 
private static final int MISS_LIMIT = 10; 
int misses = 0; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.my_layout); 

    final Handler handler = new Handler(); 
    final Runnable timer = new Runnable() { 
     @Override 
     public void run() { 
      // user too late: increment miss counter 
      if (++misses >= MISS_LIMIT) { 
       //TODO miss limit reached 
       finish(); // close this activity 
      } 
     } 
    }; 

    final View btn1 = findViewById(R.id.button1); 
    final View btn2 = findViewById(R.id.button2); 
    btn1.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      // change color of other button, and start timer 
      btn2.setBackgroundResource(R.color.new_color); 
      handler.removeCallbacks(timer); 
      handler.postDelayed(timer, ONE_SECOND); 
     } 
    }); 
    btn2.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      // user clicked button in time: restore color and stop timer 
      btn2.setBackgroundResource(R.color.orig_color); 
      handler.removeCallbacks(timer); 
     } 
    }); 
} 
+0

謝謝你的幫助! – 2014-11-26 00:55:01

0

首先創建一個方法是這樣的改變按鈕的顏色..

public void changeButton(int i){ 
    switch (i) { 
    case 0: 
     button0.setClickable(true); 
     button0.setBackgroundResource(color1); 

     break; 
    case 1: 
     button0.setClickable(false); 
     button0.setBackgroundResource(color2); 
     button1.setClickable(true); 
     button1.setBackgroundResource(color1); 
     break; 
    case 2: 
     button1.setClickable(false); 
     button1.setBackgroundResource(color2); 
     button2.setClickable(true); 
     button2.setBackgroundResource(color1); 
     break; 

     ..... 
    case 11: 
     button10.setClickable(false); 
     button10.setBackgroundResource(color2); 
     button11.setClickable(true); 
     button11.setBackgroundResource(color1); 
     break; 

    default: 
     break; 
    } 
} 

那麼你就可以實現具有一定的延遲一個Runnable在這樣的循環中調用該方法..

Handler handler=new Handler(); 
    int j=0; 
    final Runnable r = new Runnable() 
    { 
     public void run() 
     { 
      changeButton(j); 
      j++; 
      // next button color change 
      if(j<12){ 
      handler.postDelayed(this, 1000); 
      } 
      else{ 
      j=0; 
      handler.postDelayed(this, 1000); 
      } 
     } 
    }; 

    handler.post(r)