2014-08-28 72 views
0

我在使用界面单击Button时显示图像,但在仅显示image_all.png一段时间后,图像ic_launcher.png未显示在Button上。如何在单击按钮时更改图像

  • 我应该如何使用sleep显示我的第一张图片,然后显示图片2?
  • 我应该能显示两个图像相同的按钮,但随着时间的延迟。

任何帮助,将不胜感激。

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

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

回答

1

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

因此,这不是一个好主意:-)

相反,你应该使用类似一个Handler的实例。 A Handler可以在指定的延迟时间内被调用,这样动作将首先在指定的延迟后执行。最重要的是,Handler不会“阻塞”UI线程,因为Thread.sleep(1000);的确如此。

所以使用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); 

注意的1000postDelayed()末,它告诉Handler后1000毫秒,而不是立即发布这个“消息”。

附注:不像您在try-catch中那样“吃”Exceptions不是好习惯。

+0

你和我在相同的时间想出了完全相同的答案。 :-) – 2014-08-28 21:32:33

+0

@ JessieA.Morris ;-)它实际上是惊人的,因为这个问题已经开了10多个小时了,没有任何“动作” :-) – Darwind 2014-08-28 21:33:28

+0

我知道,我发现同样的事情。 10个小时,11个意见。我不知道这是怎么回事。 :-P – 2014-08-28 21:37:21

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);