我正在开发一个应该有进度对话框的项目。但是由于我没有找到一种简单的方法来设置进度对话框的样式,我在想,最简单的方法是创建一个具有自己样式的自定义对话框类,并在其上逐帧动画,然后显示它。这是我的代码:
对话框的 xml 布局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/dialog_background"
android:gravity="center"
android:orientation="horizontal"
android:padding="10dp" >
<ImageView
android:id="@+id/loaddialog_animation"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/loadanimation"
android:layout_marginRight="10dp" />
<TextView
android:id="@+id/loaddialog_text"
style="@style/SmallText"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
</LinearLayout>
这是我的对话类:
public class LoadDialog extends Dialog
{
private TextView message;
ImageView image;
AnimationDrawable animation;
public LoadDialog(Context context)
{
super(context, R.style.Dialog);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.load_dialog);
message = (TextView) findViewById(R.id.loaddialog_text);
image = (ImageView) findViewById(R.id.loaddialog_animation);
image.setBackgroundResource(R.drawable.loadanimation);
animation = (AnimationDrawable) image.getBackground();
}
public void setText(String msg)
{
message.setText(msg);
}
@Override
public void show()
{
super.show();
animation.start();
}
@Override
public void dismiss()
{
animation.stop();
super.dismiss();
}
}
和动画资源:
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="true" >
<item android:drawable="@drawable/loadbar_01" android:duration="50" />
<item android:drawable="@drawable/loadbar_02" android:duration="50" />
<item android:drawable="@drawable/loadbar_03" android:duration="50"/>
</animation-list>
问题是动画没有开始,当我尝试显示它时。我知道,有很多关于这个问题的话题,但这里是我尝试过的事情:
- 将对话框 show() 放在我活动的不同部分:onResume() 和 onCreate()。onWindowFocusChanged() 不是一个选项,因为我想显示一个对话框。显示对话框->焦点更改,关闭对话框->焦点更改->显示无限数量的对话框。
- 我试过animation.setCallback(image),animation.setVisible(true,true),animation.invalidateSelf()它们都不起作用。
- 我已经尝试了 image.post() 并在其中放置了一个 runnable 作为参数,并且在启动动画的 run 方法中,没有运气。
在这一点上,我开始没有选择了。我只是想显示 3 个图像在对话框被关闭之前发生变化。如果你知道,我做错了什么,或者任何替代方案,请告诉我!
提前致谢!