繁体   English   中英

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

[英]In Android, how do I change the color of a button, pause for a few seconds, then change it again?

这是我的代码:

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秒后显示一个蓝色按钮; 它从未表现为绿色。

我认为,如果我的大脑正常工作,我可以从其中一个帖子中找出答案:

为什么view.invalidate不能立即重绘我的安卓游戏中的屏幕

如何在执行下一行代码之前强制视图重绘

如何强制整个布局查看刷新?

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

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

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

您可以尝试查找AsyncTaskThreading

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM