我在点击Button
使用界面时显示图片,但在ic_launcher.png
仅在Button
显示一段时间后image_all.png
上没有显示图片
任何帮助都将不胜感激。
try{
button1.setBackgroundResource(R.drawable.ic_launcher);
Thread.sleep(1000);
} catch(Exception e){
}
button1.setBackgroundResource(R.drawable.images_all);
答案 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);