Android自定义进度条颜色

阅读更多

先看效果图:

Android自定义进度条颜色_第1张图片

老是提些各种需求问题,我觉得系统默认的颜色挺好的,但是Pk不过,谁叫我们不是需求人员呢,改吧!

这个没法了只能看源码了,还好下载了源码, sources\base\core\res\res\ 下应有尽有,修改进度条颜色只能找progress ,因为是改变样式,首先找styles.xml

找到xml后,进去找到:

?
1
2
3
4
5
6
7
8
9
10
< style  name = "Widget.ProgressBar" >
     < item  name = "android:indeterminateOnly" >true item >
     < item name = "android:indeterminateDrawable" >@android:drawable/progress_medium_white item >
     < item  name = "android:indeterminateBehavior" >repeat item >
     < item  name = "android:indeterminateDuration" >3500 item >
     < item  name = "android:minWidth" >48dip item >
     < item  name = "android:maxWidth" >48dip item >
     < item  name = "android:minHeight" >48dip item >
     < item  name = "android:maxHeight" >48dip item >
style >

这是那个默认转圈的,但今天我们不修改这个,我们是要改变水平进度条颜色,所以找到:

?
1
2
3
4
5
6
7
< style  name = "Widget.ProgressBar.Horizontal" >
     < item  name = "android:indeterminateOnly" >false item >
     < item  name = "android:progressDrawable" >@android:drawable/progress_horizontal item >
     < item name = "android:indeterminateDrawable" >@android:drawable/progress_indeterminate_horizontal item >
     < item  name = "android:minHeight" >20dip item >
     < item  name = "android:maxHeight" >20dip item >
style >

你看系统一步一步关联的,扩展性很性,低耦合,所以我们现在只要改变进度条是怎么样画出来的就行了 ,但是负责画进度条的是   所以我们可以找到"drawable下的 progress_horizontal 文件,改变他就可以改变进度条颜色。

?
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
xml  version = "1.0"  encoding = "utf-8" ?>
 
< layer-list  xmlns:android = "http://schemas.android.com/apk/res/android"  >
     < item  android:id = "@android:id/background" >
         < shape >
             < corners  android:radius = "5dip"  />
             < gradient
                 android:angle = "270"
                 android:centerColor = "#ff5a5d5a"
                 android:centerY = "0.75"
                 android:endColor = "#ff747674"
                 android:startColor = "#ff9d9e9d"  />
         shape >
     item >
 
     < item  android:id = "@android:id/secondaryProgress" >
         < clip >
             < shape >
                 < corners  android:radius = "5dip"  />
                 < gradient
                     android:angle = "270"
                     android:centerColor = "#80ffb600"
                     android:centerY = "0.75"
                     android:endColor = "#a0ffcb00"
                     android:startColor = "#80ffd300"  />
             shape >
         clip >
     item >
 
     < item  android:id = "@android:id/progress" >
         < clip >
             < shape >
                 < corners  android:radius = "5dip"  />
                 < gradient
                     android:angle = "270"
                     android:centerColor = "#ffffb600"
                     android:centerY = "0.75"
                     android:endColor = "#ffffcb00"
                     android:startColor = "#ffffd300"  />
             shape >
         clip >
     item >
layer-list >

看到没有,这是系统的进度条画出的布局条件

?
1
2
3
android:startColor="#80ffd300"
android:centerColor="#80ffb600"
android:endColor="#ff747674"

我们只要改变这个色值就能改变他的颜色,主要改变的是下的色值就行了。

说了这么多,到底怎么做呢,很简单:

在我们的项目下新建一个 style.xml 文件

创建一个style 标签,集成系统默认样式,然后自定义一个新的progressDrawable 文件,随后面在layout 中的progress 中引用这个文件就行。

?
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 >

下面是我的 progressbar_mini 文件,改变了下android:endColor="#F5F5F5" android:startColor="#BEBEBE" 的色值

?
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 = "5dip"  />
             < 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 = "5dip"  />
                 < gradient
                     android:angle = "270"
                     android:centerY = "0.75"
                     android:endColor = "#165CBC"
                     android:startColor = "#85B0E9"  />
             shape >
         clip >
     item >
layer-list >

最后引用其就可以了。

?
1
2
3
4
5
6
< ProgressBar
     android:id = "@+id/progress"
     style = "@style/ProgressBar_Mini"
     android:layout_width = "fill_parent"
     android:layout_height = "wrap_content"
     android:progress = "50"  />

你可能感兴趣的:(android,progressbar,自定义,style)