[英]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.