在 onClick 中連續調用 setVisibility(VISIBLE) 和 setVisibility(INVISIBLE),圖片閃一下就消失,無法看到 2 秒顯示效果。
UI 更新在同一幀合併執行,最後狀態生效;且不能在主線程 Thread.sleep(會阻塞 UI、導致 ANR)。
private final Handler handler = new Handler(Looper.getMainLooper());
private final Runnable hideRunnable = () -> imageView.setVisibility(View.INVISIBLE);
button.setOnClickListener(v -> {
imageView.setVisibility(View.VISIBLE);
handler.removeCallbacks(hideRunnable); // 防止重複點擊疊加
handler.postDelayed(hideRunnable, 2000); // 2秒後隱藏
});
Handler 綁定主線程 Looper,確保 UI 操作在主線程執行。removeCallbacks 避免多次點擊導致多個延遲任務疊加。Runnable 封裝隱藏邏輯,代碼清晰可復用。lifecycleScope.launch {
imageView.visibility = View.VISIBLE
delay(2000)
if (!isDestroyed) imageView.visibility = View.INVISIBLE
}