在android中重复代码

时间:2013-03-12 14:30:13

标签: java android

我想要一个在按下按钮时改变背景颜色的应用程序。 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);    
}

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

  1. 执行一些代码
  2. 在X时间过去之后,我想执行另一个代码,它应该保持这种方式X时间
  3. 重复此过程直到用户取消该操作。

2 个答案:

答案 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();
        }
    });