这是我的代码:
public class TestActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
start();
}
private void start() {
setContentView(R.layout.main);
LinearLayout layout = (LinearLayout) findViewById(R.id.linearLayout);
Button button = new Button(this);
layout.addView(button);
button.getBackground().setColorFilter(new LightingColorFilter(0x00000000, 0x0000FF00)); // green
button.invalidate();
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
button.getBackground().setColorFilter(new LightingColorFilter(0x00000000, 0x000000FF)); // blue
button.invalidate();
}
}
这只是在3秒后显示一个蓝色按钮;它永远不会显示为绿色。
我认为如果我的大脑正常工作,我可以从其中一篇文章中找出答案:
Why isn't view.invalidate immediately redrawing the screen in my android game
How to force a view to redraw immediately before the next line of code is executed
答案 0 :(得分:2)
你不应该在UI线程上睡觉,因为这会挂起你的界面。相反,在最初将颜色设置为绿色之后,您可以创建一个Handler(在UI线程上,因此它将使用该线程来处理消息),然后使用Handler.postDelayed发送将在3秒内处理的消息。在传递给Runnable
的{{1}}中,您可以将颜色设置为蓝色。
答案 1 :(得分:1)