Nick Butcher在Android Dev Summit 2018上的Draw Me A Rainbow演讲中的4:40,他提到了对渐变进行动画处理。他谈到了使用重复的tileMode进行渐变并创建类似彩虹的效果,如下所示:
gradient_one.xml:
<gradient xmlns:android="http://schemas.android.com/apk/res/android" android:type="radial"
android:startY="0"
android:startX="0"
android:centerX="5"
android:centerY="5"
android:gradientRadius="1"
android:tileMode="repeat"
>
<item android:color="#E91E63" android:offset="0.1"/>
<item android:color="#E91E63" android:offset="0.3"/>
<item android:color="#3F51B5" android:offset="0.3"/>
<item android:color="#3F51B5" android:offset="0.6"/>
<item android:color="#03A9F4" android:offset="0.6"/>
<item android:color="#03A9F4" android:offset="0.9"/>
<item android:color="#8BC34A" android:offset="0.1"/>
</gradient>
我很难理解他如何使用渐变为可绘制矢量设置动画。我已经尝试过使用从以上一种颜色移动到另一种颜色的动画制作动画AnimatedVectorDrawables,但是没有用。
向量:
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:height="300dp"
android:width="200dp"
android:viewportHeight="24"
android:viewportWidth="24" >
<group
android:name="rotationGroup"
android:pivotX="5"
android:pivotY="5"
>
<path
android:name="v"
android:strokeColor="@color/colorPrimary"
android:fillColor="@color/gradient_one"
android:pathData="M0,10 L0,0 10,0 10,10" />
</group>
</vector>
avd_gradient.xml:
<animated-vector xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/my_vector">
<target android:animation="@animator/color_animator" android:name="rotationGroup"/>
</animated-vector>
color_animator.xml:
<set xmlns:android="http://schemas.android.com/apk/res/android">
<objectAnimator android:propertyName="fillColor"
android:repeatCount="infinite"
android:duration="@android:integer/config_longAnimTime"
android:valueType="colorType"
android:valueFrom="#C62828"
android:valueTo="#6A1B9A"
/>
</set>
Kotlin代码开始为视图的AVD背景设置动画:
val rootVG = findViewById<ViewGroup>(R.id.root)
val animatedGradient = rootVG.background as AnimatedVectorDrawable
animatedGradient.start()