Android系统自带的进度条很丑不能满足我们在真实项目中的实际需求,以下是一个自定义对话框动画的简单演示,难点在于动画所配的图片太难找了,如果有朋友想要完整源码和图片资源的可以去我的资源页下载:
http://download.csdn.net/detail/sunshine_mood/9421936
1)、Activity:
public class MainActivity extends Activity {
private static final String TAG = MainActivity.class.getSimpleName();//获取类名
private CustomProgressDialog customProgressDialog;//自定义对话框类
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(R.layout.activity_main);
//MyApplication.getInstance().addActivity(MainActivity.this);//将Activity加入到list队列
}
//开始显示
public void button(View v){
customProgressDialog = new CustomProgressDialog(this, "正在加载中",
R.anim.frame2);
customProgressDialog.show();
}
@Override
protected void onStop() {
super.onStop();
//停止显示
if (customProgressDialog != null
&& customProgressDialog.isShowing())
customProgressDialog.dismiss();
}
}
2)、对话框类CustomProgressDialog:
/**
* 自定义对话框类
* 难点:动画,图片
* @author 阳光心态
*
*/
public class CustomProgressDialog extends ProgressDialog {
private AnimationDrawable mAnimation;
private Context mContext;
private ImageView mImageView;
private String mLoadingTip;
private TextView mLoadingTv;
private int count = 0;
private String oldLoadingTip;
private int mResid;
public CustomProgressDialog(Context context, String content, int id) {
super(context);
this.mContext = context;
this.mLoadingTip = content;
this.mResid = id;
setCanceledOnTouchOutside(true);//点击对话框外部可取消对话框显示
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initView();
initData();
}
private void initData() {
mImageView.setBackgroundResource(mResid);
// 通过ImageView对象拿到背景显示的AnimationDrawable
mAnimation = (AnimationDrawable) mImageView.getBackground();
// 为了防止在onCreate方法中只显示第一帧的解决方案之一
mImageView.post(new Runnable() {
@Override
public void run() {
mAnimation.start();
}
});
mLoadingTv.setText(mLoadingTip+"...");
}
public void setContent(String str) {
mLoadingTv.setText(str);
}
private void initView() {
setContentView(R.layout.progress_dialog);
mLoadingTv = (TextView) findViewById(R.id.loadingTv);//显示图片
mImageView = (ImageView) findViewById(R.id.loadingIv);//显示文字
}
//Activity渲染完后会调用此方法
/*@Override
public void onWindowFocusChanged(boolean hasFocus) {
// TODO Auto-generated method stub
mAnimation.start();
super.onWindowFocusChanged(hasFocus);
}*/
}
3)、动画资源frame2.xml:
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false" >
<item
android:drawable="@drawable/sprites_01"
android:duration="150"/>
<item
android:drawable="@drawable/sprites_02"
android:duration="150"/>
<item
android:drawable="@drawable/sprites_03"
android:duration="150"/>
<item
android:drawable="@drawable/sprites_04"
android:duration="150"/>
<item
android:drawable="@drawable/sprites_05"
android:duration="150"/>
<item
android:drawable="@drawable/sprites_06"
android:duration="150"/>
<item
android:drawable="@drawable/sprites_07"
android:duration="150"/>
<item
android:drawable="@drawable/sprites_08"
android:duration="150"/>
<item
android:drawable="@drawable/sprites_09"
android:duration="150"/>
<item
android:drawable="@drawable/sprites_10"
android:duration="150"/>
<item
android:drawable="@drawable/sprites_11"
android:duration="150"/>
<item
android:drawable="@drawable/sprites_12"
android:duration="150"/>
</animation-list>
3)、源码地址:
http://download.csdn.net/detail/sunshine_mood/9421936
4)、效果图: