From e9a0d6a859961bf97e9e7a0d06b2c47c7516e9b7 Mon Sep 17 00:00:00 2001 From: Yorke Lee Date: Fri, 2 May 2014 18:33:35 -0700 Subject: Fix nested prescrolling bug in ScrollView mScrollOffset should not be applied to deltaY for the current MotionEvent. Instead, it should be used to offset the y position of the next motion event instead. Change-Id: Iaed85083556d4606300d9a888662c32ab4dbf3ca --- core/java/android/widget/ScrollView.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'core/java/android/widget/ScrollView.java') diff --git a/core/java/android/widget/ScrollView.java b/core/java/android/widget/ScrollView.java index 8dfef25a..0fa75a6 100644 --- a/core/java/android/widget/ScrollView.java +++ b/core/java/android/widget/ScrollView.java @@ -628,7 +628,7 @@ public class ScrollView extends FrameLayout { final int y = (int) ev.getY(activePointerIndex); int deltaY = mLastMotionY - y; if (dispatchNestedPreScroll(0, deltaY, mScrollConsumed, mScrollOffset)) { - deltaY -= mScrollConsumed[1] + mScrollOffset[1]; + deltaY -= mScrollConsumed[1]; vtev.offsetLocation(0, mScrollOffset[1]); } if (!mIsBeingDragged && Math.abs(deltaY) > mTouchSlop) { @@ -645,7 +645,7 @@ public class ScrollView extends FrameLayout { } if (mIsBeingDragged) { // Scroll to follow the motion event - mLastMotionY = y; + mLastMotionY = y - mScrollOffset[1]; final int oldY = mScrollY; final int range = getScrollRange(); -- cgit v1.1