[英]Change color of a button every second
我想開發一個反應游戲,當它是正確的顏色(紅色)時,您必須單擊一個變色按鈕。 如何顯示顏色並在一秒鍾后更改為另一種隨機顏色,直到出現正確的顏色。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_farberkennung);
b_zurück = (Button) findViewById(R.id.b_zurück);
b_start3 = (Button) findViewById(R.id.b_start3);
b_randomColor = (Button) findViewById(R.id.b_randomcolor);
final int background;
final Random rand = new Random();
final List<Integer> list = new ArrayList<>();
list.add(getResources().getColor(R.color.red));
list.add(getResources().getColor(R.color.green));
list.add(getResources().getColor(R.color.yellow));
//list.add(getResources().getColor(R.color.blue));
//list.add(getResources().getColor(R.color.orange));
//list.add(getResources().getColor(R.color.olive));
//list.add(getResources().getColor(R.color.purple));
background = list.get(rand.nextInt(list.size()));
b_start3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
b_start3.setEnabled(false);
b_randomColor.setBackgroundColor(background);
//loop random colours till red appears
while (background != getResources().getColor(R.color.red)) {
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
b_randomColor.setBackgroundColor(background);
}
}, 1000);
}
startTime = System.currentTimeMillis();
}
});
b_randomColor.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (background == (getResources().getColor(R.color.red))) {
endTime = System.currentTimeMillis();
currentTime = endTime - startTime;
b_randomColor.setText(currentTime + " MS");
b_randomColor.setEnabled(false);
b_start3.setEnabled(true);
}
}
});```
您可以通過以下方式實現:創建一個名為Timer的新Java類文件
public class Timer {
private thread t ;
public boolean runTimer ;
public long delay ;
public int msg = 0;
private Handler handler ;
public Timer(Handler handler , long delay , int msg){
this.handler = handler ;
runTimer = true ;
this.delay = delay ;
this.msg = msg ;
t = new thread();
t.start();
}
public class thread extends Thread {
@Override
public void run(){
while (runTimer){
try{
thread.sleep(delay);
}catch (Exception e){}
Message message = handler.obtainMessage(msg);
handler.sendMessage(message);
}
}
}
public void playTimer (boolean play){
runTimer = play ;
}
}
然后在您的活動中添加此消息處理程序,並在該處理程序中,您可以測試背景顏色是否為紅色
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
.........
}
// here the code you add to your activity
private final Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
if (background != getResources().getColor(R.color.red)){
b_randomColor.setBackgroundColor(background);
}else {
// you could stop your timer thread like that ...
// timer.playTimer(false);
}
}
};
最后像這樣啟動計時器:
final Timer timer;
timer = new Timer(handler , 1000 , "time");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.