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()to 结束。我只看到第一个和最后一个图像。我尝试了其他一些方法,但无法获得预期的结果。

4

3 回答 3

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 回答
1

为什么不使用动画 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>

我错过了什么?

链接到文档

样品链接

正如示例文档所述:

需要注意的是,在 Activity 的 onCreate() 方法期间不能调用 AnimationDrawable 上调用的 start() 方法,因为 AnimationDrawable 尚未完全附加到窗口。如果您想立即播放动画而不需要交互,那么您可能希望从 Activity 中的 onWindowFocusChanged() 方法调用它,当 Android 使您的窗口成为焦点时,该方法将被调用。

于 2012-10-19T16:00:01.927 回答
0

我建议使用 ASyncTask ,然后从那里更新您的可绘制对象或使用回调。

于 2012-10-19T15:05:35.097 回答