【问题标题】:AnimatedVectorDrawable - reset() is not working properly on some Huawei devicesAnimatedVectorDrawable - reset() 在某些华为设备上无法正常工作
【发布时间】:2020-03-20 08:52:33
【问题描述】:
我们使用AnimatedVectorDrawable.reset() 将动画重置为其初始状态。这适用于大多数设备。在测试过程中,我们注意到在某些华为设备上,当调用reset() 时,动画开始运行。
在这些华为设备上复制:
- ANE-LX1 - 安卓 8.0.0、EMIU 8.0.0
- LYA-L29 - 安卓 10,EMIU 10.0.0
有什么想法可以解决这个问题吗?
【问题讨论】:
标签:
android
animation
android-vectordrawable
huawei-mobile-services
animatedvectordrawable
【解决方案1】:
为了解决这个问题,我更新了动画以在它开始的状态下结束。这让我可以停止使用AnimatedVectorDrawable.reset()。
this article 的“陈旧状态”部分帮助我解决了问题。这是该部分的重要部分:
在旧设备上,我发现它们的“状态”在每个循环中都没有被重置(按照 VectorDrawable 中的定义方式)。
...
为了解决这个问题,我添加了一个零长度动画,以便在每个循环开始时将属性设置为它们的预期值,以便它们准备好进行动画处理,例如:
<set>
<objectAnimator
android:propertyName="fillAlpha"
android:valueFrom="0"
android:valueTo="0"
android:duration="0" />
<objectAnimator
android:propertyName="fillAlpha"
android:valueFrom="0"
android:valueTo="1"
android:startOffset="1900"
android:duration="60"
android:interpolator="@android:interpolator/linear" />
</set>
这是将动画重置为其初始状态的部分:
<objectAnimator
android:propertyName="fillAlpha"
android:valueFrom="0"
android:valueTo="0"
android:duration="0" />
valueFrom 和 valueTo 在第二个 objectAnimator 中等于 valueFrom。