背景:我希望创建一个类似于原生Clock应用程序Timer的倒数计时器。我是Android动画的新手,所以我一直在评估各种解决方案。我希望和AnimatedVectorDrawable
一起去,但遇到障碍。
问题:有没有办法在AnimationVectorDrawable
中途而不是从头开始动画?如果没有,创建这样的动画的最佳做法是什么?
使用案例:我希望倒计时动画与时钟上的分钟标记保持同步,因此当用户在不在分钟标记上的时间显示时,倒计时动画开始中途通过,所以它完成了分钟标记。
animated-vector
的XML布局:
<animated-vector
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt">
<aapt:attr name="android:drawable">
<vector
android:name="vector"
android:width="26dp"
android:height="26dp"
android:viewportWidth="26"
android:viewportHeight="26">
<path
android:name="path"
android:pathData="M 13 1 C 6.373 1 1 6.373 1 13 C 1 19.627 6.373 25 13 25 C 19.627 25 25 19.627 25 13 C 25 6.373 19.627 1 13 1 Z"
android:strokeWidth="1"
android:fillType="evenOdd"/>
</vector>
</aapt:attr>
<target android:name="path">
<aapt:attr name="android:animation">
<set>
<objectAnimator
android:propertyName="trimPathStart"
android:duration="2950"
android:valueFrom="0"
android:valueTo="1"
android:valueType="floatType"
android:interpolator="@android:anim/linear_interpolator"/>
<objectAnimator
android:propertyName="trimPathStart"
android:startOffset="2950"
android:duration="50"
android:valueFrom="1"
android:valueTo="0"
android:valueType="floatType"
android:interpolator="@android:interpolator/fast_out_slow_in"/>
<objectAnimator
android:propertyName="strokeColor"
android:duration="1900"
android:valueFrom="#818181"
android:valueTo="#f0c473"
android:valueType="colorType"
android:interpolator="@android:anim/accelerate_interpolator"/>
<objectAnimator
android:propertyName="strokeAlpha"
android:duration="3000"
android:valueFrom="1"
android:valueTo="1"
android:valueType="floatType"
android:interpolator="@android:anim/linear_interpolator"/>
<objectAnimator
android:propertyName="strokeColor"
android:startOffset="1900"
android:duration="600"
android:valueFrom="#f0c473"
android:valueTo="#e06969"
android:valueType="colorType"
android:interpolator="@android:anim/accelerate_interpolator"/>
<objectAnimator
android:propertyName="strokeColor"
android:startOffset="2500"
android:duration="450"
android:valueFrom="#e06969"
android:valueTo="#e06969"
android:valueType="colorType"
android:interpolator="@android:anim/decelerate_interpolator"/>
<objectAnimator
android:propertyName="strokeColor"
android:startOffset="2950"
android:duration="50"
android:valueFrom="#e06969"
android:valueTo="#818181"
android:valueType="colorType"
android:interpolator="@android:anim/linear_interpolator"/>
</set>
</aapt:attr>
</target>
</animated-vector>