2

全部,

我有一个与 imageView、android 相关的问题。
我有一个包含 10 个位图对象的数组,称为bm.
我有一个名为im.

现在我想将数组中的位图一张一张地显示在 im 中,所以我做了以下操作:

new Thread(new Runnable() {
       public void run() {
         for(int j=0;j<10;j++){
             im.setImageBitmap(bm[j]);
         }
       }
      }).start();

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

有人可以告诉我如何处理这个问题吗?

百万感谢!

4

3 回答 3

1

您需要在设置新图像后插入sleep呼叫,以便您的眼睛有机会看到图像:)。就像是:

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

应该保持图像五秒钟,然后再进行下一张。

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

于 2012-11-03T22:54:14.737 回答
1
  1. 您应该有例外,因为您只能在 UI 线程中使用视图。如果要对其进行更改,则应在视图上调用post方法。
  2. 实际上,它的变化如此之快,以至于您只看到最后一项。

这是正确的代码:

    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();
于 2012-11-03T22:59:13.810 回答
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);
          }
       }
    });
    
于 2012-11-03T22:59:45.320 回答