【问题标题】:How to make an imageView visible after 10secs of a buttonclick?如何在单击按钮 10 秒后使 imageView 可见?
【发布时间】:2015-04-08 16:20:36
【问题描述】:

我需要在按钮单击操作 10 秒后显示我的图像视图。我已经让我的 imageview 不可见。但是,当我尝试在线程休眠(10000)后将其设置为可见时,我的应用程序崩溃了。我该如何解决这个问题?请帮忙!

【问题讨论】:

  • 请发布您的代码。
  • 你也需要分享异常
  • See here 你可以使用CountDownTimer。还有很多其他的方法。您可能在 UI 线程上调用 sleep(),这几乎从来都不是好事。没有您的代码,我们无法告诉您太多信息。
  • 非常感谢!我得到了答案! :)

标签: android imageview android-imageview


【解决方案1】:

这个很短,不会屏蔽应用:

yourButton.setOnClickListener(new View.OnClickListener(){ 
    @Override
    public void onClick(View v) {
        yourImageView.postDelayed(new Runnable() {
            @Override
            public void run() {
                if (yourImageView != null) {
                    yourImageView.setVisibility(View.VISIBLE);
                }
            }
        }, 10000);
    }         
});

一些上下文:postDelayed 向主线程发送一条消息,该消息将在 10000 毫秒内执行,即 10 秒。当 10 秒过去后,主线程将获取消息,并尝试执行 runnable。按钮可能不再存在,因为您离开了屏幕,这就是需要空检查的原因。

【讨论】:

  • 非常感谢!这是完美的工作!再次感谢! :) :)
【解决方案2】:

我认为您在主线程上执行了 Thread.sleep(),这不是正确的方法。

相反,您可以使用 AsyncTask 或 Handlers 来延迟某些代码的执行。

button.setOnClickListener(new Button.OnClickListener(){ 
    @Override
    public void onClick(View v) {
        new AsyncTask<Void, Void, Void>() {

            @Override
            protected Void doInBackground(Void... params) {
                Thread.sleep(10000);
                return null;
            }

            @Override
            protected void onPostExecute(Void aVoid) {
                super.onPostExecute(aVoid);
                yourView.setVisibility(VISIBLE);
            }
        }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
    }         
});    

【讨论】:

  • 感谢您提供此示例代码。当我使用它时,它会从这个 setVisibilyty() 崩溃应用程序。无论如何,我刚刚得到了我的答案。非常感谢!
【解决方案3】:

你不能阻塞你的主线程不超过 5 秒,你的线程也是如此。与其使用线程并使其进入睡眠状态,不如使用更好的用户计时器。

class MyTimerTask extends TimerTask {

    @Override
    public void run() {

        runOnUiThread(new Runnable() {

            @Override
            public void run() {
                Intent intent = new Intent(SplashScreen.this,
                        MainActivity.class);
                startActivity(intent);

                finish();

            }
        });
    }

}

更多信息请阅读here

【讨论】:

  • 非常感谢!我得到了答案! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-08
  • 1970-01-01
  • 2018-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多