想定义一个旋转的drawable,系统源码中看到这个东西 style="?android:attr/progressBarStyle" 发现他用了一个类似如下的 drawable ,
<animated-rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/progressbar_circle"
android:pivotX="50%"
android:pivotY="50%"
android:framesCount="12"
android:frameDuration="100" />
这其中用到了两个系统私有属性 framesCount 和 frameDuration,体验感就是动画很流畅,但如果你想自定义,就只能用下面这种,体验感就是一卡一卡的。WTF
<?xml version="1.0" encoding="utf-8"?>
<animated-rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/progressbar_circle"
android:pivotX="50%"
android:pivotY="50%"
android:fromDegrees="0.0"
android:interpolator="@android:anim/linear_interpolator"
android:repeatCount="-1"
android:toDegrees="359.0"
android:duration="100" />
那有没有啥解决办法呢?同样系统提供的layer-list 就好多了。如下
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<rotate
android:drawable="@drawable/progressbar_circle"
android:pivotX="50%"
android:pivotY="50%"
android:repeatCount="-1"
android:fromDegrees="0"
android:duration="100"
android:toDegrees="359"/>
</item>
</layer-list>
但很快你就会发现,这里面的android:duration 是不起作用的,WTF,
咋办,如果是要给progressBar用 可以再定义一个style 指定其一个android:indeterminateDuration属性 如下 ,这样 ,终于能正常了,唉,google
<!-- progressbar 自定义旋转风格-->
<style name="progressbarCircle" parent="Widget.AppCompat.ProgressBar">
<item name="android:indeterminateDrawable">@drawable/progress_medium_bak</item>
<item name="android:indeterminateDuration">500</item>
</style>