单击按钮时如何更改图像

时间:2014-08-28 10:34:49

标签: android

我在点击Button使用界面时显示图片,但在ic_launcher.png仅在Button显示一段时间后image_all.png上没有显示图片

  • 如何使用sleep显示我的第一张图片一段时间然后显示image2?
  • 我应该在同一个按钮上显示两个图像但是有延时。

任何帮助都将不胜感激。

try{
    button1.setBackgroundResource(R.drawable.ic_launcher);
    Thread.sleep(1000); 
} catch(Exception e){

}
button1.setBackgroundResource(R.drawable.images_all);

2 个答案:

答案 0 :(得分:1)

当您使用Thread.sleep(1000);时,实际上“停止”了UI线程,因为您在UI线程上调用了sleep(1000);。这会导致您的应用程序在您的情况下完全停止1秒钟。

所以这不是一个好主意: - )

相反,你应该使用像Handler这样的东西。可以使用指定的延迟调用Handler,以便在指定的延迟之后首先执行操作。最重要的是,Handler不像Thread.sleep(1000);那样“阻止”UI线程。

因此,使用Handler您的代码,可能会看起来像这样:

button1.setBackgroundResource(R.drawable.ic_launcher);
Handler uiHandler = new Handler();
uiHandler.postDelayed(new Runnable() {
    @Override
    public void run() {
        button1.setBackgroundResource(R.drawable.images_all);
    }
}, 1000);

请注意1000末尾的postDelayed(),告诉Handler在1000毫秒之后而不是立即发布此“消息”。

侧面说明:像Exceptions一样“吃掉”try-catch并不是一种好习惯。

答案 1 :(得分:1)

您应该能够看到R.drawable.ic_launcher更改发生。我对此的看法是关于你如何做Thread.sleep()。 Android不喜欢在UI线程中执行阻塞任务(例如Thread.sleep)。当您调用setBackgroundResource然后休眠时,更新UI的线程正在休眠,无法执行更新。我就是这样做的:

    button1.setBackgroundResource(R.drawable.ic_launcher);

    Handler handler = new Handler();
    handler.postDelayed(new Runnable() {
        @Override
        public void run() {
            button1.setBackgroundResource(R.drawable.images_all);
        }
    }, 1000);