Android自定义进度条主要是修改ProgressBar的style,弹窗则是在Dialog里显示ProgressBar。
直接上代码。
在style.xml里加入如下代码:
1
2
3
4
5
6
7
|
< style name = "ProgressBar_Mini" parent = "@android:style/Widget.ProgressBar.Horizontal" > < item name = "android:maxHeight" >50dip</ item > < item name = "android:minHeight" >8dip</ item > < item name = "android:indeterminateOnly" >false</ item > < item name = "android:indeterminateDrawable" >@android:drawable/progress_indeterminate_horizontal</ item > < item name = "android:progressDrawable" >@drawable/progressbar_mini</ item > </ style > |
1
2
3
4
5
6
7
8
|
< style name = "dialog" parent = "@android:style/Theme.Dialog" > < item name = "android:windowFrame" >@null</ item > < item name = "android:windowIsFloating" >true</ item > < item name = "android:windowIsTranslucent" >true</ item > < item name = "android:windowNoTitle" >true</ item > < item name = "android:backgroundDimEnabled" >true</ item > < item name = "android:windowBackground" >@color/transparent</ item > </ style > |
新建drawable/progressbar_mini.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
27
28
29
30
31
32
33
34
35
36
37
38
|
< layer-list xmlns:android = "http://schemas.android.com/apk/res/android" > < item android:id = "@android:id/background" > < shape > < corners android:radius = "0dip" /> < gradient android:angle = "270" android:centerY = "0.75" android:endColor = "#F5F5F5" android:startColor = "#BEBEBE" /> </ shape > </ item > < item android:id = "@android:id/secondaryProgress" > < clip > < shape > < corners android:radius = "0dip" /> < gradient android:angle = "270" android:centerY = "0.75" android:endColor = "#165CBC" android:startColor = "#85B0E9" /> </ shape > </ clip > </ item > < item android:id = "@android:id/progress" > < clip > < shape > < corners android:radius = "0dip" /> < gradient android:angle = "270" android:centerY = "0.75" android:endColor = "#00FF66" android:startColor = "#00FF66" /> </ shape > </ clip > </ item > </ layer-list > |
myprogressbar.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
27
28
29
|
<? xml version = "1.0" encoding = "utf-8" ?> < LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android" android:layout_width = "match_parent" android:layout_height = "match_parent" android:background = "@drawable/back_qian" android:gravity = "center" android:orientation = "vertical" > < TextView android:layout_width = "fill_parent" android:layout_height = "wrap_content" android:gravity = "center" android:text = "正在切换状态...." android:textSize = "18sp" android:textColor = "@color/black" /> < TextView android:layout_width = "fill_parent" android:layout_height = "wrap_content" android:gravity = "center" android:text = "" /> < ProgressBar android:id = "@+id/progressBar1" style = "@style/ProgressBar_Mini" android:layout_width = "290dp" android:layout_height = "17dp" /> </ LinearLayout > |
MyProgressBar.java的内容如下:
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
package com.wl.util; import android.app.Dialog; import android.content.Context; import android.content.DialogInterface; import android.content.DialogInterface.OnCancelListener; import android.view.LayoutInflater; import android.view.View; import android.widget.ProgressBar; import com.wl.R; public class MyProgressBar { Dialog dialog; Context context; // 声明ProgressBar对象 private ProgressBar pro1; /** * 构造 */ public MyProgressBar(Context context) { // TODO Auto-generated constructor stub this .context = context; dialog = new Dialog(context, R.style.dialog); dialog.setOnCancelListener(onCancelListener); } /** * 初始化进度对话框 */ public void initDialog() { LayoutInflater inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); View view = inflater.inflate(R.layout.myprogressbar, null ); dialog.setContentView(view); pro1 = (ProgressBar) dialog.findViewById(R.id.progressBar1); // 设置进度条是否自动旋转,即设置其不确定模式,false表示不自动旋转 pro1.setIndeterminate( false ); // 设置ProgressBar的最大值 pro1.setMax( 100 ); // 设置ProgressBar的当前值 pro1.setProgress( 0 ); dialog.show(); } public void setProgress( int progressValue) { pro1.setProgress(progressValue); } public void colseDialog() { dialog.dismiss(); } public boolean isShowing() { if (dialog.isShowing()) { return true ; } else { return false ; } } OnCancelListener onCancelListener = new OnCancelListener() { @Override public void onCancel(DialogInterface dialog) { // TODO Auto-generated method stub dialog.dismiss(); } }; } |
调用代码如下:
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
32
33
34
35
36
37
|
MyProgressBar myProgressBar; myProgressBar = new MyProgressBar(Dialog_TestActivity. this ); myProgressBar.initDialog(); new Thread( new Runnable() { @Override public void run() { // TODO Auto-generated method stub try { Thread.sleep( 200 ); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } for ( int i = 0 ; i < 100 ; i++) { handler.sendEmptyMessage( 0 ); try { Thread.sleep( 30 ); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }).start(); Handler handler = new Handler() { @Override public void handleMessage(Message msg) { // 改变ProgressBar的当前值 myProgressBar.setProgress(intCounter++); if (intCounter == 100 ) { intCounter = 0 ; myProgressBar.colseDialog(); } } }; |
按返回退出:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
@Override public void onBackPressed() { // TODO Auto-generated method stub Log.d( "11" , "onBackPressed()" ); if (myProgressDialog.isShowing()) { myProgressDialog.colseDialog(); } if (myProgressBar.isShowing()) { myProgressBar.colseDialog(); } super .onBackPressed(); } |
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/viviwen123/article/details/8717256