Merge "Skip fling anim if it is a no-op, to save a frame of aniamtion" into ub-launcher3-rvc-dev
diff --git a/src/com/android/launcher3/anim/FlingSpringAnim.java b/src/com/android/launcher3/anim/FlingSpringAnim.java
index 06d0f1c..6ea38ec 100644
--- a/src/com/android/launcher3/anim/FlingSpringAnim.java
+++ b/src/com/android/launcher3/anim/FlingSpringAnim.java
@@ -35,6 +35,7 @@
private final FlingAnimation mFlingAnim;
private SpringAnimation mSpringAnim;
+ private final boolean mSkipFlingAnim;
private float mTargetPosition;
@@ -57,6 +58,10 @@
.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 void start() {
mFlingAnim.start();
+ if (mSkipFlingAnim) {
+ mFlingAnim.cancel();
+ }
}
public void end() {