这是我参与8月更文挑战的第27天,活动详情查看:8月更文挑战
系列文章目录
Android改变进度条控件progressbar的样式(根据源码修改)
前言
网上有一大堆的改变progressbar样式的方法,最开始博主是直接用自定义view实现的(旋转动画),后来发现可以根据Android源码来改—>sdk,实现的代码比较简单,但是为什么这么改还是要解释一下:下面来看一下Android源码中是怎么定义progressbar的样式的。
先看看效果图:
根据Android官方文档。系统提供的其他进度条样式包括:
- Widget.ProgressBar.Horizontal
- Widget.ProgressBar.Small
- Widget.ProgressBar.Large
- Widget.ProgressBar.Inverse
- Widget.ProgressBar.Small.Inverse
- Widget.ProgressBar.Large.Inverse
以Widget.ProgressBar.Large为例。
一、style文件中定义的Widget.ProgressBar.Large样式。
<style name="Widget.ProgressBar.Large">
<item name="indeterminateDrawable">@drawable/progress_large_white</item>
<item name="minWidth">76dip</item>
<item name="maxWidth">76dip</item>
<item name="minHeight">76dip</item>
<item name="maxHeight">76dip</item>
</style>
可以明显看到除去大小的定义外,主要是progress_large_white。
二、progress_large_white.xml
<animated-rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/spinner_white_76"
android:pivotX="50%"
android:pivotY="50%"
android:framesCount="12"
android:frameDuration="100" />
- android:pivotX:表示缩放/旋转起点 X 轴坐标。
- android:pivotY:表示缩放/旋转起点 Y 轴坐标。
可以明显看到引用的是spinner_white_76图片。
三、spinner_white_76图片样式如下(红框内)
按照逻辑将此图片改成直接想要的图片即可。
四、 实现
那么既然源码中能这么定义,我们开发者当然也能(操作分成两部)。
- 第一步:模仿源码定义一个旋转动画的xml文件,将图片改成自己想要的样子(一般动画文件应该放在anim文件夹中,但是SDK中是默认放在drawable文件中的,所以博主还是放在drawable文件中使用)。
<animated-rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/loading"
android:pivotX="50%"
android:pivotY="50%"
/>
- 第二步:在要显示在UI界面的控件中将这个动画添加进去:—>indeterminateDrawable。
<ProgressBar
android:layout_width="200dp"
android:layout_height="200dp"
android:indeterminateDrawable="@drawable/progress_large_white"
/>
在使用时,当数据加载完成后,将ProgressBar隐藏即可。