问题现象
- 手机进行“开发者选项”→“Animator 时长缩放”→“关闭动画”流程设置后,发现app部分场景会直接从初始状态进入到结束状态,过渡动画消失了
问题分析
-
ValueAnimator(/frameworks/base/core/java/android/animation/ValueAnimator.java)源码分析:由源码可知,动画是否结束取决于animateBasedOnTime函数,animateBasedOnTime函数中调用getScaledDuration获取时长缩放,由于开发者选项中奖“Animator 时长缩放”修改为“关闭动画”,导致从getScaledDuration获取到的时长缩放为0,此时animateBasedOnTime会直接跳到结束,进而给finished赋值为true,表示动画已执行完毕
public final boolean doAnimationFrame(long frameTime) { ... if (mLastFrameTime < 0) { if (mSeekFraction >= 0) { long seekTime = (long) (getScaledDuration() * mSeekFraction); mStartTime = frameTime - seekTime; mSeekFraction = -1; }</