我正在试图伪造某种进度栏。我有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);
}
但是,FO循环不等待run()
结束。我只是看到第一个也是最后一个图像。我尝试了其他几件事,但无法得到所需的结果。
为什么不使用动画?看来您没有动态加载图像。
<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>
我错过了什么?
链接到文档
链接到样品
作为样本文档状态:
必须注意的是,start()方法在 在ongreate()方法的方法中都无法调用AnimationDrawable 您的活动,因为可绘制的动画尚未完全连接 到窗口。如果您想立即播放动画,而无需 需要互动,然后您可能需要从 您的活动中的onwindowfocuschanged()方法将被调用 当Android将您的窗户置于焦点时。
使用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;
我建议使用asynctask,然后从那里更新您的可绘制或使用回调。