动态更改imageView,android中的位图

时间:2012-11-03 22:43:29

标签: java android multithreading bitmap

所有

我遇到了与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();

但结果只显示数组中的最后一个位图。

有人可以告诉我该怎么处理这个问题吗?

数百万的感谢!

3 个答案:

答案 0 :(得分:1)

您需要在设置新图片后插入sleep来电,以便您的眼睛有机会看到图片:)。类似的东西:

im.setImageBitmap(bm[j]);
try {                             
    Thread.sleep(5000);           
} catch (InterruptedException e) {
    e.printStackTrace();          
}    

在进入下一个图像之前,应将图像保持五秒钟。

与其他人建议的一样,您需要使用postDelayed来正确通知UI您正在设置位图。

答案 1 :(得分:1)

  1. 您应该有异常,因为您只能在UI线程中使用视图。 如果您想对其进行更改,则应在视图上调用post方法。
  2. 实际上它变化得太快,你只能看到最后一项。
  3. 这是正确的代码:

        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)

  1. 不要更改线程中的UI元素。大多数情况下,这会导致异常。我不知道为什么不在这里。

  2. 你只需几毫秒即可完成全部十张图像的爆破。这就是为什么最后一个是你看到的唯一一个。你需要放慢速度。

  3. 最简单的方法是Handler / Runnable实现,如下所示:

    im.post(new Runnable() {   
       int j = 0;      
       @Override   
       public void run() {
          im.setImageBitmap(bm[j]);
          if(j++ < 10){
             im.postDelayed(this, 1000);
          }
       }
    });