2012-10-19 77 views
2

加载图像我想假某种进度条。我有X图像,并希望ImageView以一定的延迟显示它们。Android的 - 有延迟

我一直试图做这样的事情:

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()结束。我只看到第一张和最后一张图片。我尝试了其他一些东西,但无法获得理想的效果。

+0

哦。是的,这不会延迟for循环。它基本上创建了一个任务,稍后运行。因此,您将创建一系列未来运行的任务,同时。你真正需要做的是从延迟内调用下一个图像get。所以它会加载一个延迟,然后当运行时,将加载下一个延迟。 – Doomsknight

回答

1

为什么不使用动画可绘制?看起来你没有动态加载图像。

<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

由于样本文档状态:

需要注意的是不能的onCreate中被称为呼吁 AnimationDrawable的start()方法()方法是很重要的 您的活动,因为AnimationDrawable尚未完全附着 到窗口。如果你想立即播放动画,而不需要 互动,那么你可能想从你的活动中 onWindowFocusChanged()方法,该方法将被调用 时,Android将你的窗口成为焦点调用它。

+0

好的一个......但是直到现在我都无法工作。没有反应,它只是显示第一个图像... – Ron

+0

好吧,不允许在'onCreate()' – Ron

+0

开始动画,你可能会添加关于oncreate和java代码示例的警告给你的帖子... :) – Ron

0

我会建议使用的AsyncTask,然后从那里或使用回调更新您的绘制。

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; 
+0

这不起作用。你将会睡觉新的线程,而不是for循环(UI线程)。 – Doomsknight

+0

@Doomsknight当然这个代码在他们完成实际工作之前,所有的线程都会睡觉。设置不同的睡眠时间将使它们按顺序显示。这是一个简单的逻辑。就这样。 – Juvanis

+0

你绝对正确!我没有注意到'我*'。 (对不起)我以为你只是在睡觉而不是延迟变量。这确实会错过延迟:) +1 – Doomsknight