AnimatedVectorDrawable - reset() 在某些华为设备上无法正常工作

AnimatedVectorDrawable - reset() is not working properly on some Huawei devices

我们使用 AnimatedVectorDrawable.reset() 将动画重置为初始状态。这适用于大多数设备。在测试时,我们注意到在某些华为设备上,当调用 reset() 时动画开始 运行.

在这些华为设备上转载:

有什么办法可以解决这个问题吗?

为了解决这个问题,我更新了动画以在它开始时的状态结束。这让我停止使用 AnimatedVectorDrawable.reset().

this article 中的 "Stale state" 部分帮助我解决了问题。这是该部分的重要部分:

On older devices I found that their ‘state’ wasn’t being reset (to how it was defined in the VectorDrawable) on each loop. ... To fix this I added a zero length animation to set properties to their expected value at the start of each loop so that they’re ready to be animated e.g.:

<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" />

valueFromvalueTo等于valueFrom第二个objectAnimator.