Android自定义dialog之进度条的实现(三)

进度条的实现原理其实很简单,就是设置一个动画,使图片在对话框中旋转。同时设置一定的时间限制,通常为几秒钟;当时间到期后开始执行相应的业务操作。具体的介绍见下文:

效果图:

![ProgressDialog1](https://gitee.com/absentm/gitRes/raw/master/NotePics/ProgressDialog1](.png)


具体实现

通过设计自定义style,完成具体的样式.

Button3的监听事件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
private Dialog progressDialog;

Button buttonProgressDialog = (Button) findViewById(R.id.button3);
buttonProgressDialog.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

progressDialog = DialogUtil.createLoadingDialog(MainActivity.this, "正在加载中...");
progressDialog.show();
// 这里你可以进行一些等待时的操作,我这里用8秒后显示Toast代理等待操作
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
progressDialog.dismiss();
Toast.makeText(getApplicationContext(), "登录成功", Toast.LENGTH_SHORT).show();
}
}, 8000);
}
});

DialogUtil.createLoadingDialog()方法的实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
/**
* 得到自定义的progressDialog
*
* @param context
* @param msg
* @return
*/
public static Dialog createLoadingDialog(Context context, String msg) {

LayoutInflater inflater = LayoutInflater.from(context);
View v = inflater.inflate(R.layout.loading_dialog, null);// 得到加载view
LinearLayout layout = (LinearLayout) v.findViewById(R.id.dialog_view);// 加载布局
// main.xml中的ImageView
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);
// 使用ImageView显示动画
spaceshipImage.startAnimation(hyperspaceJumpAnimation);
tipTextView.setText(msg);// 设置加载信息

Dialog loadingDialog = new Dialog(context, R.style.loading_dialog);// 创建自定义样式dialog

loadingDialog.setCancelable(false);// 不可以用“返回键”取消
loadingDialog.setContentView(layout, new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.MATCH_PARENT));// 设置布局

return loadingDialog;
}

R.layout中loading_dialog.xml文件的实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/dialog_view"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:minHeight="60dp"
android:minWidth="180dp"
android:gravity="center"
android:padding="10dp"
android:background="@drawable/loading_bg">

<ImageView
android:id="@+id/img"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/loading" />

<TextView
android:id="@+id/tipTextView"
android:layout_marginTop="5dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:text="数据加载中……" />
</LinearLayout>

这里也给出了进度条的背景图片:

ProgressDialog-loading

R.anim中的load_animation.xml:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?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="1500"
android:startOffset="-1"
android:repeatMode="restart"
android:repeatCount="-1" />
</set>

此文件放在res文件夹下的anim文件夹中

R.style中的loading_dialog.xml样式:

1
2
3
4
5
6
7
8
<!-- 自定义loading dialog -->
<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">@drawable/loading_bg</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowContentOverlay">@null</item>
</style>

此文件放在values文件夹的style.xml中


这样效果基本上就做成了!下篇文章中完成第四个按钮“多选框”!

0%