Android - 延迟加载图片

时间:2012-10-19 15:01:57

标签: java android imageview handler delay

我正试图伪造某种进度条。我有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()结束。我只看到第一张和最后一张图片。我尝试了其他一些但却无法获得理想的结果。

3 个答案:

答案 0 :(得分: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;

答案 1 :(得分: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>

我错过了什么吗?

Link to the Docs

Link to sample

正如示例文档所述:

  

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

答案 2 :(得分:0)

我建议使用ASyncTask,然后从那里更新您的drawable或使用回调。