我想要一个在按下按钮时改变背景颜色的应用程序。 500毫秒后,我想将背景颜色改为黑色2000ms。然后再次重复整个过程,直到用户终止该过程。
我有以下代码,但它不能正常工作。
private void set() {
rl.setBackgroundColor(Color.WHITE);
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
rl.setBackgroundColor(Color.BLACK);
set(); // can I do that?
}
});
}
}, 500);
}
有人能指出我正确的方向我该怎么做?所以我想:
答案 0 :(得分:4)
我认为这样的事情应该有用
Handler handler = new Handler();
Runnable turnBlack = new Runnable(){
@Override
public void run() {
myView.setBackgroundColor(Color.BLACK);
goWhite();
}};
Runnable turnWhite = new Runnable(){
@Override
public void run() {
myView.setBackgroundColor(Color.White);
goBlack();
}};
public void goBlack() {
handler.postDelayed(turnBlack, 500);
}
public void goWhite() {
handler.postDelayed(turnWhite, 2000);
}
答案 1 :(得分:1)
使用AnimationDrawable可以更轻松地完成此操作:
AnimationDrawable drawable = new AnimationDrawable();
ColorDrawable color1 = new ColorDrawable(Color.YELLOW);
ColorDrawable color2 = new ColorDrawable(Color.BLACK);
// First color yellow for 500 ms
drawable.addFrame(color1, 500);
// Second color black for 2000 ms
drawable.addFrame(color2, 2000);
// Set if animation should loop. In this case yes it will
drawable.setOneShot(false);
Button btn = (Button)findViewById(R.id.button1);
btn.setBackground(drawable);
findViewById(R.id.buttonLan).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// Start animation
((AnimationDrawable)v.getBackground()).start();
}
});