AnimatedVectorDrawable - reset() 在某些华为设备上无法正常工作
AnimatedVectorDrawable - reset() is not working properly on some Huawei devices
我们使用 AnimatedVectorDrawable.reset()
将动画重置为初始状态。这适用于大多数设备。在测试时,我们注意到在某些华为设备上,当调用 reset()
时动画开始 运行.
在这些华为设备上转载:
- ANE-LX1 - Android8.0.0,EMIU 8.0.0
- LYA-L29 - Android 10,EMIU 10.0.0
有什么办法可以解决这个问题吗?
为了解决这个问题,我更新了动画以在它开始时的状态结束。这让我停止使用 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" />
valueFrom
和valueTo
等于valueFrom
第二个objectAnimator
.
我们使用 AnimatedVectorDrawable.reset()
将动画重置为初始状态。这适用于大多数设备。在测试时,我们注意到在某些华为设备上,当调用 reset()
时动画开始 运行.
在这些华为设备上转载:
- ANE-LX1 - Android8.0.0,EMIU 8.0.0
- LYA-L29 - Android 10,EMIU 10.0.0
有什么办法可以解决这个问题吗?
为了解决这个问题,我更新了动画以在它开始时的状态结束。这让我停止使用 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" />
valueFrom
和valueTo
等于valueFrom
第二个objectAnimator
.