diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java index 8f5c35ea74253..455885451fc53 100644 --- a/core/java/android/widget/AbsListView.java +++ b/core/java/android/widget/AbsListView.java @@ -520,6 +520,11 @@ public abstract class AbsListView extends AdapterView implements Te */ private int mLastPositionDistanceGuess; + /** + * Used for determining when to cancel out of overscroll. + */ + private int mDirection = 0; + /** * Interface definition for a callback to be invoked when the list or grid * has been scrolled. @@ -2238,6 +2243,7 @@ public abstract class AbsListView extends AdapterView implements Te if (overscrollMode == OVERSCROLL_ALWAYS || (overscrollMode == OVERSCROLL_IF_CONTENT_SCROLLS && !contentFits())) { + mDirection = 0; // Reset when entering overscroll. mTouchMode = TOUCH_MODE_OVERSCROLL; if (rawDeltaY > 0) { mEdgeGlowTop.onPull((float) overscroll / getHeight()); @@ -2261,9 +2267,13 @@ public abstract class AbsListView extends AdapterView implements Te final int oldScroll = mScrollY; final int newScroll = oldScroll - incrementalDeltaY; + int newDirection = y > mLastY ? 1 : -1; - if ((oldScroll >= 0 && newScroll <= 0) || - (oldScroll <= 0 && newScroll >= 0)) { + if (mDirection == 0) { + mDirection = newDirection; + } + + if (mDirection != newDirection) { // Coming back to 'real' list scrolling incrementalDeltaY = -newScroll; mScrollY = 0; @@ -2308,6 +2318,7 @@ public abstract class AbsListView extends AdapterView implements Te } } mLastY = y; + mDirection = newDirection; } break; } diff --git a/core/java/android/widget/EdgeGlow.java b/core/java/android/widget/EdgeGlow.java index e24f49543496d..1f7daabd426a1 100644 --- a/core/java/android/widget/EdgeGlow.java +++ b/core/java/android/widget/EdgeGlow.java @@ -90,7 +90,7 @@ public class EdgeGlow { // How much dragging should effect the height of the glow image. // Number determined by user testing. - private static final int PULL_DISTANCE_GLOW_FACTOR = 10; + private static final int PULL_DISTANCE_GLOW_FACTOR = 5; private static final int VELOCITY_EDGE_FACTOR = 8; private static final int VELOCITY_GLOW_FACTOR = 16;