layout.setBackgroundColor(Color.GREEN);
try {
Thread.sleep(1250);
} catch (InterruptedException e) {
e.printStackTrace();
}
layout.setBackgroundColor(Color.BLUE);
我想首先将版式的BackgroundColor更改为绿色,并在等待1.25秒后应变为蓝色。 1.25秒后,BackgroundColor变为蓝色,但之前未变为绿色。我该如何解决?
答案 0 :(得分:2)
您正在将主线程(UI线程)置于睡眠状态,这会导致问题。
尝试一下
layout.setBackgroundColor(Color.GREEN);
layout.postDelayed(new Runnable() {
@Override
public void run() {
layout.setBackgroundColor(Color.BLUE);
}
}, 1250);
确保将layout
声明为final。
答案 1 :(得分:0)
您刚刚在上方两次更改了背景颜色。因此,仅将其视为您的最后一种蓝色颜色。
你必须做这样的事情。
layout.setBackgroundColor(Color.GREEN);
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
layout.setBackgroundColor(Color.BLUE);
}
}, 1250);
答案 2 :(得分:0)
尝试像这样的处理程序:
layout.setBackgroundColor(Color.GREEN);
Handler h=new Handler();
h.postDelayed(new Runnable() {
@Override
public void run() {
layout.setBackgroundColor(Color.BLUE);
}
},1250);
永远不要在UI线程上执行Thread.sleep()。
那是最初导致问题的原因。
您可以用它来睡觉,例如。后台线程。
此处理程序解决方案具有两个优点:
(1)避免了第二个线程的系统开销,
(2)在UI线程上运行,因此可以进行UI更改而不会引起异常。