簡體   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