From 5112cdd30b62009545d6bfd43b2ccd11abd9cdf7 Mon Sep 17 00:00:00 2001 From: Tony Wickham Date: Fri, 12 Jun 2020 14:23:46 -0500 Subject: [PATCH] Skip fling anim if it is a no-op, to save a frame of aniamtion Bug: 158701272 Change-Id: Id2bc502d1caaeefeca339d5e5ad355ad8ba6d7ec --- src/com/android/launcher3/anim/FlingSpringAnim.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/com/android/launcher3/anim/FlingSpringAnim.java b/src/com/android/launcher3/anim/FlingSpringAnim.java index 06d0f1c463..6ea38ec8ab 100644 --- a/src/com/android/launcher3/anim/FlingSpringAnim.java +++ b/src/com/android/launcher3/anim/FlingSpringAnim.java @@ -35,6 +35,7 @@ public class FlingSpringAnim { private final FlingAnimation mFlingAnim; private SpringAnimation mSpringAnim; + private final boolean mSkipFlingAnim; private float mTargetPosition; @@ -57,6 +58,10 @@ public class FlingSpringAnim { .setMaxValue(maxValue); mTargetPosition = targetPosition; + // We are already past the fling target, so skip it to avoid losing a frame of the spring. + mSkipFlingAnim = startPosition <= minValue && startVelocity < 0 + || startPosition >= maxValue && startVelocity > 0; + mFlingAnim.addEndListener(((animation, canceled, value, velocity) -> { mSpringAnim = new SpringAnimation(object, property) .setStartValue(value) @@ -84,6 +89,9 @@ public class FlingSpringAnim { public void start() { mFlingAnim.start(); + if (mSkipFlingAnim) { + mFlingAnim.cancel(); + } } public void end() {