Android SDK虽然已经提供有进度条组件,但用的时候我们会发现可能风格与我们应用的整体风格不太搭配,而且ProgressDialog的可定制行也不太强,这时就需要我们自定义实现一个ProgressDialog。
- 总体思路:在一个Dialog中放置一个图片,让这个图片按自已指定的速度旋转,达到显示进度的效果。
- 实现代码部分
/**
* @param context
* @param msg
* @return
*/
public static Dialog createLoadingDialog(Context context, String msg) {
LayoutInflater inflater = LayoutInflater.from(context);
View v = inflater.inflate(R.layout.custom_dialog_progress_trans_layout, null);
LinearLayout layout = (LinearLayout) v.findViewById(R.id.dialog_view);
ImageView spaceshipImage = (ImageView) v.findViewById(R.id.img);
TextView tipTextView = (TextView) v.findViewById(R.id.tipTextView);
Animation hyperspaceJumpAnimation = AnimationUtils.loadAnimation(
context, R.anim.load_animation);
spaceshipImage.startAnimation(hyperspaceJumpAnimation);
tipTextView.setText(msg);
Dialog loadingDialog = new Dialog(context, R.style.loading_dialog);
loadingDialog.setCancelable(false);
loadingDialog.setContentView(layout, new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.MATCH_PARENT));
return loadingDialog;
}
- 样式部分
1) 旋转速度 ( res\anmi\load_animation.xml )
<?xml version="1.0" encoding="utf-8"?>
<set android:shareInterpolator="false" xmlns:android="http://schemas.android.com/apk/res/android">
<rotate
android:interpolator="@android:anim/linear_interpolator"
android:pivotX="50%"
android:pivotY="50%"
android:fromDegrees="0"
android:toDegrees="+360"
android:duration="800"
android:startOffset="-1"
android:repeatMode="restart"
android:repeatCount="-1"/>
</set>
2) 总体布局 (res\layout\cutstom_dialog_progress_trans_layout )
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/dialog_view"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center"
android:minHeight="5000dp"
android:minWidth="3000dp"
android:orientation="vertical">
<ImageView
android:id="@+id/img"
android:layout_width="80dp"
android:layout_height="80dp"
android:src="@drawable/alert_dialog" />
<TextView
android:id="@+id/tipTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:text="Processing……"
android:textColor="#03afff"
android:textSize="18sp" />
</LinearLayout>
3)进度条对话框样式( res\style\styles.xml )
<!-- 进度条对话框 -->
<style name="loading_dialog" parent="android:style/Theme.Dialog">
<item name="android:windowFrame">@null</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowContentOverlay">@null</item>
</style>
4)调用
//设置进度条
Dialog progressDialog = DialogUIUtils.showLoadingDialog(MainActivity.this,"正在查询中,请耐心等待......");
progressDialog.show();
//点击物理返回键是否可取消dialog
progressDialog.setCancelable(true);
//点击dialog之外 是否可取消
progressDialog.setCanceledOnTouchOutside(false);