自定义水平ProgressBar
ProgressBar有两个进度,一个是android:progress,另一个是android:secondaryProgress。ProgressBar还分为确定的和不确定的,确定的是我们能明确看到进度,相反不确定的就是不清楚、不确定一个操作需要多长时间来完成,这个时候就需要用的不确定的ProgressBar了。属性android:indeterminate。
第一步,样式文件名:progressbar_bg.xml,放在drawable文件夹:
01.
<?xml version=
"1.0"
encoding=
"utf-8"
?>
02.
<layer-list xmlns:android=
"http://schemas.android.com/apk/res/android"
>
03.
04.
<!--
3
个层的顺序即为显示时的叠加顺序-->
05.
<!--背景色-->
06.
<item android:id=
"@android:id/background"
>
07.
<shape>
08.
<corners android:radius=
"5dip"
/>
09.
10.
<solid android:color=
"#CCCCCC"
/>
11.
</shape>
12.
</item>
13.
14.
<!--二级进度条的颜色-->
15.
<item android:id=
"@android:id/secondaryProgress"
>
16.
<clip>
17.
<shape>
18.
<corners android:radius=
"5dip"
/>
19.
20.
<solid android:color=
"#88F56100"
/>
21.
</shape>
22.
</clip>
23.
</item>
24.
25.
<!--一级进度条的颜色,也可以直接替换成图片-->
26.
<item android:id=
"@android:id/progress"
>
27.
<clip>
28.
<shape>
29.
<corners android:radius=
"5dip"
/>
30.
31.
<solid android:color=
"#F56100"
/>
32.
</shape>
33.
</clip>
34.
</item>
35.
36.
</layer-list>
第二步,布局组件代码:
01.
<?xml version=
"1.0"
encoding=
"utf-8"
?>
02.
<LinearLayout xmlns:android=
"http://schemas.android.com/apk/res/android"
03.
android:orientation=
"vertical"
04.
android:layout_width=
"match_parent"
05.
android:layout_height=
"match_parent"
>
06.
07.
<ProgressBar
08.
android:id=
"@+id/progress_bar"
09.
style=
"?android:attr/progressBarStyleHorizontal"
10.
android:layout_width=
"match_parent"
11.
android:layout_height=
"wrap_content"
12.
android:layout_marginTop=
"100dp"
13.
android:minHeight=
"20dp"
14.
android:padding=
"10dp"
15.
android:progressDrawable=
"@drawable/progressbar_bg"
/>
16.
17.
</LinearLayout>
自定义圆形ProgressBar
第一步,在drawable文件夹下新建:progressbar_circle_1.xml,如下:<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/loading" //自定义图片
android:fromDegrees="0"
android:pivotX="50%"
android:pivotY="50%"
android:toDegrees="360" >
</rotate>
第二步,在资源文件styles中定义mProgress_circle,如下:
<style name="mProgress_circle">
<item name="android:indeterminateDrawable">@drawable/progressbar_circle_1</item>
<item name="android:minWidth">25dp</item>
<item name="android:minHeight">25dp</item>
<item name="android:maxWidth">60dp</item>
<item name="android:maxHeight">60dp</item>
</style>
支持大小自己随意定,别失真就好
第三步,组件中引用,如下:
<ProgressBar
android:id="@+id/progressBar2"
style="@style/mProgress_circle"
android:layout_gravity="center_vertical"
android:layout_width="match_parent"
android:indeterminateDuration="1200"
android:layout_height="wrap_content" />
更多:带进度的圆形进度条: http://blog.csdn.net/xiaanming/article/details/10298163
类似:自定义RatingBar。在drewable下定义一个图片资源ratingbar_drawable.xml 如下
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+android:id/background"
android:drawable="@drawable/unselect">
</item>
<item
android:id="@+android:id/secondaryProgress"
android:drawable="@drawable/unselect">
</item>
<item
android:id="@+android:id/progress"
android:drawable="@drawable/selected">
</item>
</layer-list>
之后再styles.xml下添加一个标签,这个style继承父style Widget.RatingBar
<style name="MyRatingBar" parent="@android:style/Widget.RatingBar">
<item name="android:progressDrawable">@drawable/ratingbar_drawable</item>
<item name="android:minHeight">32dip</item> </style>
<RatingBar
android:id="@+id/ratingbar"
style="@style/MyRatingBar"//最后定义布局文件
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:numStars="5"
android:rating="5" />