我创建了一个自定义的ProgressDialog,它有一个生动的ImageView。但这给出了在AsyncTask执行中使用的错误。 AsyncTask失业了。我尝试使用runOnUiThread动画而不起作用。如何在运行AsyncTask时使用此动画?
layout_progress.xml(仅图片)
<ImageView
android:id="@+id/ivLoading"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@anim/loading"
android:layout_centerHorizontal="true"
android:layout_marginTop="100dp"/>
loading.xml(动画)
<?xml version="1.0" encoding="utf-8"?>
<animation-list android:id="@+id/animation" android:oneshot="false"
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/load5_1" android:duration="150" />
<item android:drawable="@drawable/load5_2" android:duration="150" />
<item android:drawable="@drawable/load5_3" android:duration="150" />
<item android:drawable="@drawable/load5_4" android:duration="150" />
<item android:drawable="@drawable/load5_5" android:duration="150" />
<item android:drawable="@drawable/load5_6" android:duration="150" />
<item android:drawable="@drawable/load5_7" android:duration="150" />
<item android:drawable="@drawable/load5_8" android:duration="150" />
<item android:drawable="@drawable/load5_9" android:duration="150" />
<item android:drawable="@drawable/load5_10" android:duration="150" />
</animation-list>
自定义进度对话框的方法显示
public void show() {
super.show();
setContentView(layoutId);
final ImageView imageView = (ImageView) findViewById(R.id.ivLoading);
final AnimationDrawable anim = (AnimationDrawable) imageView.getDrawable();
final Runnable run = new Runnable() {
@Override
public void run() {
anim.start();
}
};
imageView.post(run);
//test 2 - doesnt work
/*
final Runnable run = new Runnable() {
@Override
public void run() {
anim.start();
imageView.post(this);
}
};
activity.runOnUiThread(run);
*/
}
答案 0 :(得分:0)
您不应该在AsyncTask中执行此操作。 UI的操作只能在UI线程中完成。
有一个简单的例子说明你想要在这里实现的目标: http://developer.android.com/guide/topics/graphics/drawable-animation.html
在确定ImageView已附加到视图层次结构后,尝试并启动动画。引用我发布的链接:
重要的是要注意,在Activity的onCreate()方法中,无法调用在AnimationDrawable上调用的start()方法,因为AnimationDrawable尚未完全附加到窗口。如果你想立即播放动画而不需要交互,那么你可能想从你的Activity中的onWindowFocusChanged()方法调用它,当Android让你的窗口成为焦点时会调用它。