DO NOT MERGE. Fix logic for switching between overscroll and scroll modes.
The issue here was originally that webview was showing twice as intense of an effect for edge glow as lists. The root cause was that abslistview was calling onPull half as often as webview. This occurred because every time an action_move came into the touch handler for abslistview when it was in overscroll, the mode was ALWAYS changed back to scroll mode. Therefore, half the action_move events were essentially being eating by the abslistview state machine. After fixing that issue, needed to decrease the intensity of the effect for webview and abslistview by halving the PULL_DISTANCE_GLOW_FACTOR. Change-Id: I5dbdf4f1219f3bb157a71d4fccf8fa42e2abe047
This commit is contained in:
@@ -520,6 +520,11 @@ public abstract class AbsListView extends AdapterView<ListAdapter> 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<ListAdapter> 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<ListAdapter> 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<ListAdapter> implements Te
|
||||
}
|
||||
}
|
||||
mLastY = y;
|
||||
mDirection = newDirection;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user