自定义progressbar|Android简单自定义圆形和水平ProgressBar的样式

1、ProgressBar分为两种,我们能明确看到进度,不确定的就是不清楚、不确定一个操作需要多长时间来完成,这个时候就需要用的不确定的ProgressBar了。属性android:indeterminate如果设置为true的话,那么ProgressBar就可能是圆形的滚动条或者水平的滚动条(由样式决定),但是我们一般时候,是直接使用Style类型来区分圆形还是水平ProgressBar的。
2、ProgressBar(Horizontal 才有,无进度的没有)有两个进度,一个是android:progress,另一个是android:secondaryProgress。后者主要是为缓存需要所涉及的,比如在看网络视频时候都会有一个缓存的进度条以及还要一个播放的进度,在这里缓存的进度就可以是android:secondaryProgress,而播放进度就是android:progress,有了secondProgress,可以很方便定制ProgressBar。




3、ProgressBar的样式设定其实有两种方式,在API文档中说明的方式如下:

  • Widget.ProgressBar.Horizontal
  • Widget.ProgressBar.Small
  • Widget.ProgressBar.Large
  • Widget.ProgressBar.Inverse
  • Widget.ProgressBar.Small.Inverse
  • Widget.ProgressBar.Large.Inverse
使用的时候可以这样:style="@android:style/Widget.ProgressBar.Small",另外还有一种方式就是使用系统的attr,下面的方式是系统的style:


  • style="?android:attr/progressBarStyle"
  • style="?android:attr/progressBarStyleHorizontal"
  • style="?android:attr/progressBarStyleInverse"
  • style="?android:attr/progressBarStyleLarge"
  • style="?android:attr/progressBarStyleLargeInverse"
  • style="?android:attr/progressBarStyleSmall"
  • style="?android:attr/progressBarStyleSmallInverse"
  • style="?android:attr/progressBarStyleSmallTitle"

如:

android:id="@+id/progressBar" style="?android:attr/progressBarStyleHorizontal" android:layout_width="match_parent" android:layout_height="wrap_content" />



android:id="@+id/progressBar" style="@android:style/Widget.ProgressBar.Horizontal" android:layout_width="match_parent" android:layout_height="wrap_content" />

的效果是一样的。
我们去看一下style="?android:attr/progressBarStyleHorizontal"的源码和style="@android:style/Widget.ProgressBar.Horizontal" 的源码其实是一样的如下:

name="Widget.ProgressBar.Horizontal"> false

 false    @drawable/progressbar_horizontal  @android:drawable/progress_indeterminate_horizontal  

20dip 20dip true 所以其实我们要修改样式的话只需要修改 android:progressDrawable"对应的资源就可以了。

@drawable/progressbar_horizontal

下面看@android:drawable/progress_horizontal的源码:


一目了然了,三个条目,对应了 background,progress,secondaryProgress。所以只需要修改对应项就可以了,如下在drawable文件中创建一个 progressbar_horizontal_custom.xml





其实就是改变了色织 和半径。 然后我们在values文件中的styles.xml文件中添加一个自定义的style

name="ProgressHorizontal"> false @drawable/progressbar_horizontal_custom.xml @android:drawable/progress_indeterminate_horizontal 10dip 10dip

将 android:progressDrawable 的值改成我们自己定义的progressbar_horizontal_custom.xml
然后我们就可以在XMl中使用我们自定义的样式了

android:id="@+id/progressBar" style="@style/ProgressHorizontal" android:layout_width="match_parent" android:layout_height="wrap_content" android:progress="50" android:secondaryProgress="70" android:visibility="visible" />



效果:
自定义progressbar|Android简单自定义圆形和水平ProgressBar的样式
文章图片

我这里还改了他的高度。


还有就是 background,progress,secondaryProgress对应的三个条目,可以用图片来代替shape.但是一点要用.9path的图片.


例如:




其他用法是一样的再次不多说。




好下面看转圈的进度条


android:id="@+id/progressBar" style="@android:style/Widget.ProgressBar" android:layout_gravity="center_vertical" android:layout_width="match_parent" android:layout_height="wrap_content" />

我们先看Widget.Progress的源码:

name="Widget.ProgressBar"> true @drawable/progress_medium_white repeat 3500 48dip 48dip 48dip 48dip false

其中

@drawable/progress_medium_white


以上属性的值可以是一个动画,也可以是一个图片(shape也可以),
再看 @drawable/progress_medium_white(andorid4.0)

xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/spinner_white_48" android:pivotX="50%" android:pivotY="50%" android:framesCount="12" android:frameDuration="100" />

发现其实就是一个不断重复的旋转动画
所以只要将

android:drawable="@drawable/spinner_white_48"

属性对应的图片换成我们需要的样式就可以定制我们自己想要的样式了。 后面的步骤和horizontal的一样再次不多说




【自定义progressbar|Android简单自定义圆形和水平ProgressBar的样式】

    推荐阅读