android 如何显示一个视图3秒钟,然后隐藏它?

6ojccjat  于 2023-01-15  发布在  Android
关注(0)|答案(7)|浏览(174)

我尝试使用线程,但Android抛出"CalledFromWrongThreadException:只有创建视图层次结构的原始线程才能接触其视图。"。
那么,我如何等待3秒钟,然后隐藏视图,让GUI响应呢?

计时器使用另一个线程,所以它不会解决..

lnlaulya

lnlaulya1#

有一种更简单的方法:使用View.postDelayed(可运行,延迟)

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

它不是很精确:可以在3.5或3.2秒内隐藏,因为它发送到UI线程的消息队列中。
使用post()或runOnUiThread()作为setTimeout()。

ukdjmx9f

ukdjmx9f2#

生成一个单独的线程,休眠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
abithluo

abithluo3#

无需引用视图或休眠线程:

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

tyg4sfes4#

我知道这有点牵强,但如果您碰巧使用协程,这里有一个答案:

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

fae0ux8s5#

您可以显示视图,然后以这种方式将其隐藏。

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

9udxz4iz6#

最新Kotlin代码:

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

lyfkaqu17#

我陷入了这样的问题。所以,我听说了协程。他们可以在不干扰主线程的情况下完成这类任务。
lifeCycleScope.启动{延迟(2000)绑定.图像视图.可见性=视图.消失}

相关问题