前几天一直在折腾progressbar的圆角进度条动画,各种爬贴摸索,几经折腾找到一种比较方便的方法实现,这里做下笔记,避免下次折腾。原生的progressbar的条形进度条的进度左右是直角的,没有圆角效果的。首先我们来认识一下progressbar。要认识这个progressbar,就需要Read the fucking source code.(盗用了某大牛的话了)。
先参考google的api 文档说明(地址在这里:https://developer.android.com/intl/zh-cn/reference/android/widget/ProgressBar.html),这里不一一介绍,只是介绍和做这个效果相关的,需要看其他就自己去看了。这里简单说一下这两个的区别,
setProgressDrawable和setIndeterminateDrawable。前者一般使用于确定时间,或者长度显示使用的,比如,下载文件的大小是固定的,这时可以使用条形的progressbar显示下载的文件大小。但是有一些却不是固定的,比如请求网络数据时候的时间,下载文件需要的时间,这种显示就不是固定的时间,会随着网速的变化而变化的,这种时候就使用setIndeterminateDrawable方法。官方的api也说明了很仔细了,in indeterminate mode不确定模式。
progressbar在使用纯色的时候,我们是可以控制进度条两端的圆角大小的。先看看系统样式的源码情况:
条形进度条样式Widget.ProgressBar.Horizontal
<span style="background-color: rgb(249, 249, 249);"><style
name="Widget.ProgressBar.Horizontal">
<item name="android:indeterminateOnly">false</item>
</span><span style="background-color: rgb(102, 255, 255);"><item name="android:progressDrawable">@android:drawable/progress_horizontal</item></span><span style="background-color: rgb(249, 249, 249);">
<item name="android:indeterminateDrawable">@android:drawable/progress_indeterminate_horizontal</item>
<item name="android:minHeight">20dip</item>
<item name="android:maxHeight">20dip</item>
<item name="android:mirrorForRtl">true</item>
</style>