Merge "DO NOT MERGE. Fix logic for switching between overscroll and scroll modes." into gingerbread
This commit is contained in:
committed by
Android (Google) Code Review
commit
106950f20b
@@ -520,6 +520,11 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
|
|||||||
*/
|
*/
|
||||||
private int mLastPositionDistanceGuess;
|
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
|
* Interface definition for a callback to be invoked when the list or grid
|
||||||
* has been scrolled.
|
* has been scrolled.
|
||||||
@@ -2238,6 +2243,7 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
|
|||||||
if (overscrollMode == OVERSCROLL_ALWAYS ||
|
if (overscrollMode == OVERSCROLL_ALWAYS ||
|
||||||
(overscrollMode == OVERSCROLL_IF_CONTENT_SCROLLS &&
|
(overscrollMode == OVERSCROLL_IF_CONTENT_SCROLLS &&
|
||||||
!contentFits())) {
|
!contentFits())) {
|
||||||
|
mDirection = 0; // Reset when entering overscroll.
|
||||||
mTouchMode = TOUCH_MODE_OVERSCROLL;
|
mTouchMode = TOUCH_MODE_OVERSCROLL;
|
||||||
if (rawDeltaY > 0) {
|
if (rawDeltaY > 0) {
|
||||||
mEdgeGlowTop.onPull((float) overscroll / getHeight());
|
mEdgeGlowTop.onPull((float) overscroll / getHeight());
|
||||||
@@ -2261,9 +2267,13 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
|
|||||||
|
|
||||||
final int oldScroll = mScrollY;
|
final int oldScroll = mScrollY;
|
||||||
final int newScroll = oldScroll - incrementalDeltaY;
|
final int newScroll = oldScroll - incrementalDeltaY;
|
||||||
|
int newDirection = y > mLastY ? 1 : -1;
|
||||||
|
|
||||||
if ((oldScroll >= 0 && newScroll <= 0) ||
|
if (mDirection == 0) {
|
||||||
(oldScroll <= 0 && newScroll >= 0)) {
|
mDirection = newDirection;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mDirection != newDirection) {
|
||||||
// Coming back to 'real' list scrolling
|
// Coming back to 'real' list scrolling
|
||||||
incrementalDeltaY = -newScroll;
|
incrementalDeltaY = -newScroll;
|
||||||
mScrollY = 0;
|
mScrollY = 0;
|
||||||
@@ -2308,6 +2318,7 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
mLastY = y;
|
mLastY = y;
|
||||||
|
mDirection = newDirection;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -90,7 +90,7 @@ public class EdgeGlow {
|
|||||||
|
|
||||||
// How much dragging should effect the height of the glow image.
|
// How much dragging should effect the height of the glow image.
|
||||||
// Number determined by user testing.
|
// 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_EDGE_FACTOR = 8;
|
||||||
private static final int VELOCITY_GLOW_FACTOR = 16;
|
private static final int VELOCITY_GLOW_FACTOR = 16;
|
||||||
|
|||||||
Reference in New Issue
Block a user