2013-03-12 75 views
0

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

我有下面的代码,但它不工作,因为我认为它应该。

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

像这样的东西应该工作,我认为

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

小修改此代码将正常工作。谢谢。 – rootpanthera 2013-03-12 14:53:39

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(); 
     } 
    }); 
+0

你的代码是正确的,但我有一些其他的事情要做在切换代码中,所以只有切换颜色不起作用。 – rootpanthera 2013-03-12 14:53:11