我正试图伪造某种进度条。我有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()
结束。我只看到第一张和最后一张图片。我尝试了其他一些但却无法获得理想的结果。
答案 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>
我错过了什么吗?
正如示例文档所述:
重要的是要注意调用的start()方法 在onCreate()方法期间无法调用AnimationDrawable 您的Activity,因为AnimationDrawable尚未完全附加 到窗口。如果你想立即播放动画,没有 需要交互,那么你可能想从中调用它 您的Activity中的onWindowFocusChanged()方法将被调用 当Android让您的窗口成为焦点时。
答案 2 :(得分:0)
我建议使用ASyncTask,然后从那里更新您的drawable或使用回调。