在Android中,如何更改按钮的颜色,暂停几秒钟,然后再次更改?

时间:2013-02-25 00:36:27

标签: android

这是我的代码:

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

How to force an entire layout View refresh?

2 个答案:

答案 0 :(得分:2)

你不应该在UI线程上睡觉,因为这会挂起你的界面。相反,在最初将颜色设置为绿色之后,您可以创建一个Handler(在UI线程上,因此它将使用该线程来处理消息),然后使用Handler.postDelayed发送将在3秒内处理的消息。在传递给Runnable的{​​{1}}中,您可以将颜色设置为蓝色。

答案 1 :(得分:1)

设置颜色后,您几乎立即睡觉了主UI线程。这意味着线程在有机会重绘之前就被锁定了。

对此的一个解决方案是使用线程。设置背景颜色,然后使用另一个线程进行休眠,完成后调用主(UI)线程再次更改颜色。

您可以尝试查找AsyncTaskThreading