0

我想要一个在按下按钮时改变背景颜色的应用程序。500 毫秒后,我想将背景颜色更改为黑色 2000 毫秒。然后再次重复整个过程,直到用户终止。

我有以下代码,但它没有按我认为的那样工作。

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

有人能指出我正确的方向吗?我该怎么做?所以我想要:

  1. 执行一些代码
  2. X时间过去后,我想执行另一个代码,它应该保持这种状态X时间
  3. 重复过程,直到用户取消。
4

2 回答 2

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);
}
于 2013-03-12T14:46:00.893 回答
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();
        }
    });
于 2013-03-12T14:43:36.890 回答