2

全て、

imageView、androidに関連する問題があります。
と呼ばれる10個のビットマップオブジェクトを含む配列がありますbm
と呼ばれるimageViewがありimます。

ここで、配列内のビットマップを im で 1 つずつ表示したいので、次のようにしました。

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

ただし、結果には配列内の最後のビットマップのみが表示されます。

誰かがこの問題をどうするか教えてもらえますか?

何百万もの感謝!

4

3 に答える 3

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. わずか数ミリ秒で 10 枚の画像すべてを爆破しています。そのため、最後に表示されるのは 1 つだけです。あなたはそれを遅くする必要があります。

  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 に答える
1

新しい画像を設定した後に呼び出しを挿入しsleepて、目が画像を見る機会があるようにする必要があります:)。何かのようなもの:

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

次の画像に進む前に、画像を 5 秒間保持する必要があります。

他の人が示唆しているようにpostDelayed、ビットマップを設定していることをUIに適切に通知するために使用する必要があります。

于 2012-11-03T22:54:14.737 に答える