特定时间后更改颜色

时间:2015-09-27 18:47:38

标签: android

如何在特定时间后自动更改颜色之间的应用程序。我的代码由于某种原因无法正常工作

    Random r = new Random();
    Timer t = new Timer();
    LinearLayout ll = (LinearLayout) findViewById(R.id.ll);

    long m = System.nanoTime();
    int seconds = (int) (m/1000);

    if(seconds <= 5){
       ll.setBackgroundColor(Color.BLACK);
    }else{
       ll.setBackgroundColor(Color.WHITE);
    }

对于前。屏幕为黑色,经过特定时间后为白色。并且时间减少了,变化更快。

4 个答案:

答案 0 :(得分:3)

请尝试以下代码进行换色。 使用倒数计时器根据条件更改颜色。

new CountDownTimer(5000,1000)
{
     onFinish()
     {

          if(flag==1)
          {
                     //color set black
                     flag=0;
                     //start the countdown timer again.
           }
          else
           {
                     //color set white
                     flag=1;
                     //start the countdown timer again.
           }
     }
}

答案 1 :(得分:1)

您正在尝试将纳秒转换为秒,但实际上您所做的并不相同!!

尝试

int seconds = (int) (m/1000000000);

将nan0秒转换为秒

编辑:

如果您只想继续更改颜色,请使用以下代码:

public static int color = 1;
android.os.Handler customHandler = new android.os.Handler();
                customHandler.postDelayed(updateTimerThread, 0);

及其定义:

private Runnable updateTimerThread = new Runnable()
{
        public void run()
        {
            //write here whaterver you want to repeat
            if(color == 1){
            ll.setBackgroundColor(Color.BLACK);
            color = 2;
            }else{
              ll.setBackgroundColor(Color.WHITE);
              color = 1;
            }

            customHandler.postDelayed(this, 5000);// will repeat after 5 seconds
        }
};

答案 2 :(得分:1)

你可以用胎面来管理它,试试这个。线程将是实现此目的的最佳方式,因为您希望以固定间隔连续更改颜色。

Handler handler ;
LinearLayout ll ;
int i = 0;
int colors[] = {Color.BLACK, Color.WHITE, Color.BLUE, Color.GREEN, Color.GRAY};
Runnable runnable = new Runnable() {
    @Override
    public void run() {
        ll.setBackgroundColor(colors[i]);
        i++;
     }
};


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ......
    .......
    handler  = new Handler();
    ll = (LinearLayout) findViewById(R.id.ll);

    Thread myTread = new Thread(){
        public void run() {
            try {
                while(true){
                    sleep(3000);
                    handler.post(runnable);

                }

            }
            catch (InterruptedException e) {}
        }

    };
    myTread.start();
}

代码将按代码中的每3个sleep(3000)更改背景颜色。每次更改时都会从一组预定义的颜色数组中选择。

您还可以使用随机生成的颜色。要么随机生成rgb值,要么就像我一样将颜色存储在数组中并随机迭代它

答案 3 :(得分:0)

尝试按照代码

Calendar c = Calendar.getInstance(); 
int seconds = c.get(Calendar.SECOND);
//Adding Log Statement to check

Log.i(Tag, String.valueOf(seconds);
if(seconds % 10 < 5){
       ll.setBackgroundColor(Color.BLACK);
    }else{
       ll.setBackgroundColor(Color.WHITE);
    }