summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author George Mount <mount@google.com> 2021-03-19 19:48:11 +0000
committer George Mount <mount@google.com> 2021-03-19 21:46:06 +0000
commit2e91e0e01cb684232daace46ae461eaf52547180 (patch)
treed2bce64638b95f73e534f3cd066fb49df75062f3
parente0f61653879074ef41f234aea528bbf58077b272 (diff)
Fixed EdgeEffect drawn on non-RecordingCanvas
Fixes: 183079166 When the EdgeEffect was drawn on a non-RecordingCanvas, the animation was never completed when using TYPE_STRETCH. Because TYPE_STRETCH can only be applied to RecordingCanvas, the animation ends immediately when drawn on a non-RecordingCanvas. Test: manual, I53d59a3b3cd14be658d899ff41c1fa4b83a98a32 Change-Id: I29c04ff7e0aa3269c1b4e9e503dfa641195820a8
-rw-r--r--core/java/android/widget/EdgeEffect.java11
1 files changed, 9 insertions, 2 deletions
diff --git a/core/java/android/widget/EdgeEffect.java b/core/java/android/widget/EdgeEffect.java
index 5f55887d6019..d9cc3ee80da8 100644
--- a/core/java/android/widget/EdgeEffect.java
+++ b/core/java/android/widget/EdgeEffect.java
@@ -640,6 +640,12 @@ public class EdgeEffect {
mWidth,
mHeight
);
+ } else {
+ // This is TYPE_STRETCH and drawing into a Canvas that isn't a Recording Canvas,
+ // so no effect can be shown. Just end the effect.
+ mState = STATE_IDLE;
+ mDistance = 0;
+ mVelocity = 0;
}
boolean oneLastFrame = false;
@@ -771,8 +777,9 @@ public class EdgeEffect {
* considered at rest or false if it is still animating.
*/
private boolean isAtEquilibrium() {
- double displacement = mDistance * mHeight; // in pixels
- return Math.abs(mVelocity) < VELOCITY_THRESHOLD
+ double displacement = mDistance * mHeight * LINEAR_STRETCH_INTENSITY; // in pixels
+ double velocity = mVelocity * LINEAR_STRETCH_INTENSITY;
+ return Math.abs(velocity) < VELOCITY_THRESHOLD
&& Math.abs(displacement) < VALUE_THRESHOLD;
}