summaryrefslogtreecommitdiff
path: root/core/java/android
diff options
context:
space:
mode:
authorGeorge Mount <mount@google.com>2021-05-24 15:19:49 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2021-05-24 15:19:49 +0000
commitebde5e48e69aac9bb7c8ce314ff978e7becce054 (patch)
tree8b8ba27712ac3719ad6a8469ff538d3768a91f62 /core/java/android
parentd49a40998aa13d4bc8ffbfd7893c9198b7727f8a (diff)
parentd2cbe50f18fb86eff9092077f77614f3e1ae9817 (diff)
Merge "Fix overscroll doesn't affect scrolling when released" into sc-dev
Diffstat (limited to 'core/java/android')
-rw-r--r--core/java/android/widget/AbsListView.java17
-rw-r--r--core/java/android/widget/EdgeEffect.java11
2 files changed, 17 insertions, 11 deletions
diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java
index 4d3565556a68..5e2209e65f45 100644
--- a/core/java/android/widget/AbsListView.java
+++ b/core/java/android/widget/AbsListView.java
@@ -3574,28 +3574,27 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
private void scrollIfNeeded(int x, int y, MotionEvent vtev) {
int rawDeltaY = y - mMotionY;
int scrollOffsetCorrection = 0;
- int scrollConsumedCorrection = 0;
if (mLastY == Integer.MIN_VALUE) {
rawDeltaY -= mMotionCorrection;
}
- if (dispatchNestedPreScroll(0, mLastY != Integer.MIN_VALUE ? mLastY - y : -rawDeltaY,
- mScrollConsumed, mScrollOffset)) {
+
+ int incrementalDeltaY = mLastY != Integer.MIN_VALUE ? y - mLastY : rawDeltaY;
+
+ // First allow releasing existing overscroll effect:
+ incrementalDeltaY = releaseGlow(incrementalDeltaY, x);
+
+ if (dispatchNestedPreScroll(0, -incrementalDeltaY, mScrollConsumed, mScrollOffset)) {
rawDeltaY += mScrollConsumed[1];
scrollOffsetCorrection = -mScrollOffset[1];
- scrollConsumedCorrection = mScrollConsumed[1];
+ incrementalDeltaY += mScrollConsumed[1];
if (vtev != null) {
vtev.offsetLocation(0, mScrollOffset[1]);
mNestedYOffset += mScrollOffset[1];
}
}
final int deltaY = rawDeltaY;
- int incrementalDeltaY =
- mLastY != Integer.MIN_VALUE ? y - mLastY + scrollConsumedCorrection : deltaY;
int lastYCorrection = 0;
- // First allow releasing existing overscroll effect:
- incrementalDeltaY = releaseGlow(incrementalDeltaY, x);
-
if (mTouchMode == TOUCH_MODE_SCROLL) {
if (PROFILE_SCROLLING) {
if (!mScrollProfilingStarted) {
diff --git a/core/java/android/widget/EdgeEffect.java b/core/java/android/widget/EdgeEffect.java
index 756e3ce91bf9..207385d12d90 100644
--- a/core/java/android/widget/EdgeEffect.java
+++ b/core/java/android/widget/EdgeEffect.java
@@ -342,6 +342,9 @@ public class EdgeEffect {
mGlowAlphaFinish = mGlowAlpha;
mGlowScaleYFinish = mGlowScaleY;
+ if (mEdgeEffectType == TYPE_STRETCH && mDistance == 0) {
+ mState = STATE_IDLE;
+ }
}
/**
@@ -739,8 +742,12 @@ public class EdgeEffect {
private boolean isAtEquilibrium() {
double displacement = mDistance * mHeight; // in pixels
double velocity = mVelocity;
- return Math.abs(velocity) < VELOCITY_THRESHOLD
- && Math.abs(displacement) < VALUE_THRESHOLD;
+
+ // Don't allow displacement to drop below 0. We don't want it stretching the opposite
+ // direction if it is flung that way. We also want to stop the animation as soon as
+ // it gets very close to its destination.
+ return displacement < 0 || (Math.abs(velocity) < VELOCITY_THRESHOLD
+ && displacement < VALUE_THRESHOLD);
}
private float dampStretchVector(float normalizedVec) {