2

ある種のプログレスバーを偽造しようとしています。X 個の画像がありImageView、一定の遅延でそれらを表示したいと考えています。

私はこのようなことをしようとしました:

for(i=2;i<X;i++) 
{
        Handler handler = new Handler();
        handler.postDelayed(new Runnable() {  

              @Override
              public void run() {

               drawable = getResources().getDrawable(getResources()
                                .getIdentifier("img_"+i, "drawable", getPackageName()));

               imgPayment.setImageDrawable(drawable);
               }}, DELAY);                  
}

しかし、 for ループは がrun()終了するのを待ちません。最初と最後の画像だけ見ました。他のいくつかのことを試しましたが、望ましい結果を得ることができませんでした。

4

3 に答える 3

1

Animation Drawable を使用しないのはなぜですか? 画像を動的にロードしていないようです。

 <animation-list android:id="@+id/selected" android:oneshot="false">
    <item android:drawable="@drawable/wheel0" android:duration="50" />
    <item android:drawable="@drawable/wheel1" android:duration="50" />
    ...
 </animation-list>

私は何か見落としてますか?

ドキュメントへのリンク

サンプルへのリンク

サンプル ドキュメントの状態:

AnimationDrawable で呼び出された start() メソッドは、Activity の onCreate() メソッド中に呼び出すことができないことに注意することが重要です。これは、AnimationDrawable がまだウィンドウに完全にアタッチされていないためです。操作を必要とせずにアニメーションをすぐに再生したい場合は、Activity の onWindowFocusChanged() メソッドから呼び出すことができます。このメソッドは、Android がウィンドウにフォーカスを移したときに呼び出されます。

于 2012-10-19T16:00:01.927 に答える
1

を使用するのはThread.sleep()どうですか?各画像のスリープ間隔を段階的に設定すると、順番通りに表示されます。

for (i = 1; i < X; i++) 
{
    //Handler handler = new Handler();
    handler.postDelayed(new Runnable() {

        @Override
        public void run() 
        {
            Thread.sleep(i * 1000); // REMARK HERE!
            drawable = getResources().getDrawable(getResources().getIdentifier
                                  ("img_" + i, "drawable", getPackageName()));
            imgPayment.setImageDrawable(drawable);
        }
    });
}

ただし、上記のコードのように変数を使用できるようにするには、変数iをグローバルな静的変数として宣言します。

static int i = 0;
于 2012-10-19T15:12:42.007 に答える