所有
我遇到了与imageView,android有关的问题
我有一个包含10个位图对象的数组,称为bm
我有一个名为im
的imageView。
现在我想逐个展示数组中的位图,所以我做了以下几点:
new Thread(new Runnable() {
public void run() {
for(int j=0;j<10;j++){
im.setImageBitmap(bm[j]);
}
}
}).start();
但结果只显示数组中的最后一个位图。
有人可以告诉我该怎么处理这个问题吗?
数百万的感谢!
答案 0 :(得分:1)
您需要在设置新图片后插入sleep
来电,以便您的眼睛有机会看到图片:)。类似的东西:
im.setImageBitmap(bm[j]);
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
在进入下一个图像之前,应将图像保持五秒钟。
与其他人建议的一样,您需要使用postDelayed
来正确通知UI您正在设置位图。
答案 1 :(得分:1)
这是正确的代码:
new Thread(new Runnable() {
public void run()
{
for (int j = 0; j < 10; j++)
{
final int index = j;
im.postDelayed(new Runnable() {
@Override
public void run()
{
im.setImageBitmap(bm[index]);
}
}, j * 1000); // delay j seconds
}
}
}).start();
答案 2 :(得分:1)
不要更改线程中的UI元素。大多数情况下,这会导致异常。我不知道为什么不在这里。
你只需几毫秒即可完成全部十张图像的爆破。这就是为什么最后一个是你看到的唯一一个。你需要放慢速度。
最简单的方法是Handler / Runnable实现,如下所示:
im.post(new Runnable() {
int j = 0;
@Override
public void run() {
im.setImageBitmap(bm[j]);
if(j++ < 10){
im.postDelayed(this, 1000);
}
}
});