如何自定义圆形进度条哪,也就是替换一下进度条的图片而已。

先分析一下,系统对进度条如何定义的:

咱们一般情况下载布局文件中这么书写:

//在布局文件里的代码   <ProgressBar        android:id="@+id/progressBar1"        style="?android:attr/progressBarStyleSmall"        android:layout_width="wrap_content"        android:layout_height="wrap_content" />

style="?android:attr/progressBarStyleSmall" 这个引用的是样式

这是在att.xml文件里的内容   <declare-styleable><attr name="progressBarStyleSmall" format="reference" />   </declare-styleable> 
这是在theme.xml中的内容   <style name="Theme"><item name="progressBarStyleSmall">@android:style/Widget.ProgressBar.Small</item>   <style>

从上面可以看出,进度条的样式放在了系统的主题样式里面的,做为系统样式的一部分。

再看看这个样式文件如何定义的:

//进度条的style   //在styles.xml文件中的内容   <style name="Widget.ProgressBar.Small">        <item name="android:indeterminateDrawable">@android:drawable/progress_small_white</item>        <item name="android:minWidth">16dip</item>        <item name="android:maxWidth">16dip</item>        <item name="android:minHeight">16dip</item>        <item name="android:maxHeight">16dip</item>    </style>
看到这里就知道,引用的图片在这里:<item name="android:indeterminateDrawable">@android:drawable/progress_small_white</item>

//引用的drawble     //progress_small_white.xml    <?xml version="1.0" encoding="utf-8"?>//放到drawable文件夹下了<animated-rotate xmlns:android="http://schemas.android.com/apk/res/android"    android:drawable="@drawable/spinner_white_16"    android:pivotX="50%"    android:pivotY="50%"    android:framesCount="12"    android:frameDuration="100" /> //然后就是这张图片了spinner_white_16,这种图片没在源码中找到

注意:spinner_white_16不一定就是一张纯的图片,有可能是动画。

从下面的实现方式就能知道spinner_white_16到底是不是图片:在这里明确一下,可以是图片,当然也可以使其他的,请看下面的实现

定义实现:

<ProgressBar android:id="@+id/loading_process_dialog_progressBar"android:layout_width="wrap_content" android:layout_height="wrap_content"android:indeterminate="false" android:indeterminateDrawable="@anim/loading" />

其实就是
android:indeterminateDrawable="@anim/loading"

把这个属性指向的资源改为你想要的就可以。

实现的三种方式:

1.指向动画的实现方式

熊猫阅读就是利用这种方式实现的:

看代码:

在res资源文件夹下的anim文件夹下创建一个动画文件:

内容如下:比如名字命名为loading.xml

<?xml version="1.0" encoding="UTF-8"?><animation-list android:oneshot="false"xmlns:android="http://schemas.android.com/apk/res/android"><item android:duration="150" android:drawable="@drawable/loading_01" /><item android:duration="150" android:drawable="@drawable/loading_02" /><item android:duration="150" android:drawable="@drawable/loading_03" /><item android:duration="150" android:drawable="@drawable/loading_04" /><item android:duration="150" android:drawable="@drawable/loading_05" /><item android:duration="150" android:drawable="@drawable/loading_06" /><item android:duration="150" android:drawable="@drawable/loading_07" /></animation-list> 
每个item分别引用一张图片

引用就是这样

android:indeterminateDrawable="@anim/loading"

2.指向用颜色定义的drawable资源:

<?xml version="1.0" encoding="utf-8"?><rotate xmlns:android="http://schemas.android.com/apk/res/android"    android:fromDegrees="0"    android:pivotX="50%"    android:pivotY="50%"    android:toDegrees="360" >    <shape        android:innerRadiusRatio="3"        android:shape="ring"        android:thicknessRatio="8"        android:useLevel="false" >        <gradient            android:centerColor="#FFDC35"            android:centerY="0.50"            android:endColor="#CE0000"            android:startColor="#FFFFFF"            android:type="sweep"            android:useLevel="false" />    </shape></rotate>

引用的时候就是使用drawble了

android:indeterminateDrawable="@drawable/style_xml_color"
当然这样也可以:

<?xml version="1.0" encoding="utf-8"?><animated-rotate xmlns:android="http://schemas.android.com/apk/res/android"    android:drawable="@drawable/spinner_16"    android:pivotX="50%"    android:pivotY="50%"  />

3.引用一个图片

drawable文件:

<?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android" >    <item>        <rotate            android:drawable="@drawable/dialog_progress_round2_res"            android:fromDegrees="0.0"            android:pivotX="50.0%"            android:pivotY="50.0%"            android:toDegrees="360.0" />    </item></layer-list>

引用一张图片

android:drawable="@drawable/dialog_progress_round2_res"

最后总结一下,其实引用的里面,都有旋转动画,如果只引用一张图片的话,他不会旋转的。有兴趣的朋友自己可以试一下。也可以看看源码如何实现的。有什么建议请留言。


使用drawable和第二种方式一样。

需要源码的同学,加入这个群:200956440,群共享里有源码。





更多相关文章

  1. Android使用第三方外部JAR库文件
  2. Android类动态加载技术
  3. 使用Android(安卓)MediaPlayer播放媒体文件
  4. Android-单元测试
  5. Android字符串资源及其格式化
  6. Android(安卓)Bitmap压缩策略
  7. 微信接口 - android
  8. android 全志a10(2.3.4)开发三 (打包编译文件及生成最终烧录镜像)
  9. Android中使用HttpURLConnection实现GET POST JSON数据与下载图

随机推荐

  1. 自定义按比例显示的ImageView
  2. android design library提供的TabLayout
  3. FileProvider 调用系统相机拍照 出现on a
  4. Android(安卓)kernel和标准Linux Kernel
  5. Android(安卓)4.4+ 实现半透明状态栏(Tran
  6. sendBroadcast和sendStickyBroadcast的区
  7. Android实现网络多线程断点续传下载
  8. Get the meta-data value in Android(安
  9. Android(安卓)SQLite使用
  10. Android(安卓)数据传递-通过静态变量传递