如何在特定时间后自动更改颜色之间的应用程序。我的代码由于某种原因无法正常工作
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);
}
对于前。屏幕为黑色,经过特定时间后为白色。并且时间减少了,变化更快。
答案 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);
}