簡體   English   中英

如何顯示視圖 3 秒,然后隱藏它?

[英]How to show a view for 3 seconds, and then hide it?

我嘗試使用線程,但 android 拋出“CalledFromWrongThreadException:只有創建視圖層次結構的原始線程才能觸及它的視圖。”。

那么我如何等待 3 秒然后隱藏視圖,讓 GUI 響應?

--

A Timer 也使用另一個線程,所以它不會解決..

有一種更簡單的方法:使用View.postDelayed(runnable, delay)

View view = yourView;
view.postDelayed(new Runnable() {
        public void run() {
            view.setVisibility(View.GONE);
        }
    }, 3000);

這不是很精確:可能會在 3.5 或 3.2 秒內隱藏,因為它會發布到 ui 線程的消息隊列中。

使用 post() 或 runOnUiThread() 就像 setTimeout() 一樣。

生成一個休眠 3 秒的單獨線程,然后調用runOnUiThread來隱藏視圖。

    Thread thread = new Thread() {
        @Override
        public void run() {
            try {
                Thread.sleep(3000);
            } catch (InterruptedException e) {
            }

            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    // Do some stuff
                }
            });
        }
    };
    thread.start(); //start the thread

無需引用視圖或休眠線程:

    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            // do stuff
        }
    }, 3000);

我知道這是一個延伸,但如果你碰巧使用協程,這里有一個答案:

    lifecycleScope.launch {
        delay(3000)
        header.visibility = View.GONE
    }

您可以顯示您的視圖,然后以這種方式隱藏它。

View view = yourView;
view.setVisibility(View.VISIBLE);
new Handler().postDelayed(() ->  view.setVisibility(View.GONE), 3000);

最新Kotlin代碼:

YourView.visibility = View.VISIBLE
// removing the banner after 3 sec
YourView.postDelayed({
   YourView.visibility = View.GONE
},3000)

我陷入了這樣的問題。 所以,我聽說了協程。 他們可以在不干擾主線程的情況下完成這些任務。

lifeCycleScope.launch{ delay(2000) binding.imageView.visibility = View.GONE }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM