summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author George Mount <mount@google.com> 2021-06-30 19:46:39 +0000
committer George Mount <mount@google.com> 2021-07-01 18:07:15 +0000
commit4c19a7cc2a5db090f113fa2ad4ad26acd5c7c1b8 (patch)
tree4e3bc81e4a87df08dbf381b9d0a037ccbac42d3f
parent8fd5255fc41d1efbb3b9b29daf1a8f0e73d3f449 (diff)
Limit overscroll stretch for animation
Bug: 192465706 Stretch overscroll was allowing pull distances beyond 1, but the effect only applied until 1. This meant that as the stretch relaxed, it would appear stopped at 1 until it dropped below 1. This CL does two things. First, it limits the pull distance to 1, so that if it is pulled beyond 1, the distance remains 1 and the spring will immediately retract from 1 with onRelease(). Second, when the fling hits 1, it stops the fling animation and immediately begins retracting from a velocity of 0. Test: new tests and manual testing for visual effect Test: I23cd8990fff24dbef36a93c16c115948d774a557 Change-Id: I06f1533aed0ce24756c535789fdcc7e99c5bfb9b
-rw-r--r--core/java/android/widget/EdgeEffect.java8
1 files changed, 8 insertions, 0 deletions
diff --git a/core/java/android/widget/EdgeEffect.java b/core/java/android/widget/EdgeEffect.java
index 472e3e72ab2f..c110ab956030 100644
--- a/core/java/android/widget/EdgeEffect.java
+++ b/core/java/android/widget/EdgeEffect.java
@@ -365,6 +365,10 @@ public class EdgeEffect {
mDuration = PULL_TIME;
mPullDistance += deltaDistance;
+ if (edgeEffectBehavior == TYPE_STRETCH) {
+ // Don't allow stretch beyond 1
+ mPullDistance = Math.min(1f, mPullDistance);
+ }
mDistance = Math.max(0f, mPullDistance);
mVelocity = 0;
@@ -783,6 +787,10 @@ public class EdgeEffect {
+ mDampedFreq * sinCoeff * Math.cos(mDampedFreq * deltaT));
mDistance = (float) distance / mHeight;
mVelocity = (float) velocity;
+ if (mDistance > 1f) {
+ mDistance = 1f;
+ mVelocity = 0f;
+ }
if (isAtEquilibrium()) {
mDistance = 0;
mVelocity = 0;