diff options
| author | Adam Powell <adamp@google.com> | 2012-05-03 11:00:53 -0700 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2012-05-03 11:00:53 -0700 |
| commit | 43b8fd76c03fe4d3c46919e98af91a18176c2654 (patch) | |
| tree | 053d12d07e4e25840458881e7dfbc0700c278db9 /core/java/android | |
| parent | 57e6136ce79241348b3563c4368a327ca2906610 (diff) | |
| parent | b3e02c44d57ac18d1debf21044289cf85d0dd672 (diff) | |
| download | frameworks_base-43b8fd76c03fe4d3c46919e98af91a18176c2654.zip frameworks_base-43b8fd76c03fe4d3c46919e98af91a18176c2654.tar.gz frameworks_base-43b8fd76c03fe4d3c46919e98af91a18176c2654.tar.bz2 | |
Merge "Fix nested cross-scrolling for ScrollView/HorizontalScrollView" into jb-dev
Diffstat (limited to 'core/java/android')
| -rw-r--r-- | core/java/android/widget/HorizontalScrollView.java | 27 | ||||
| -rw-r--r-- | core/java/android/widget/ScrollView.java | 31 |
2 files changed, 48 insertions, 10 deletions
diff --git a/core/java/android/widget/HorizontalScrollView.java b/core/java/android/widget/HorizontalScrollView.java index c2559a5..1986450 100644 --- a/core/java/android/widget/HorizontalScrollView.java +++ b/core/java/android/widget/HorizontalScrollView.java @@ -536,10 +536,15 @@ public class HorizontalScrollView extends FrameLayout { switch (action & MotionEvent.ACTION_MASK) { case MotionEvent.ACTION_DOWN: { - mIsBeingDragged = getChildCount() != 0; - if (!mIsBeingDragged) { + if (getChildCount() == 0) { return false; } + if ((mIsBeingDragged = !mScroller.isFinished())) { + final ViewParent parent = getParent(); + if (parent != null) { + parent.requestDisallowInterceptTouchEvent(true); + } + } /* * If being flinged and user touches, stop the fling. isFinished @@ -555,11 +560,23 @@ public class HorizontalScrollView extends FrameLayout { break; } case MotionEvent.ACTION_MOVE: + final int activePointerIndex = ev.findPointerIndex(mActivePointerId); + final int x = (int) ev.getX(activePointerIndex); + int deltaX = mLastMotionX - x; + if (!mIsBeingDragged && Math.abs(deltaX) > mTouchSlop) { + final ViewParent parent = getParent(); + if (parent != null) { + parent.requestDisallowInterceptTouchEvent(true); + } + mIsBeingDragged = true; + if (deltaX > 0) { + deltaX -= mTouchSlop; + } else { + deltaX += mTouchSlop; + } + } if (mIsBeingDragged) { // Scroll to follow the motion event - final int activePointerIndex = ev.findPointerIndex(mActivePointerId); - final int x = (int) ev.getX(activePointerIndex); - final int deltaX = (int) (mLastMotionX - x); mLastMotionX = x; final int oldX = mScrollX; diff --git a/core/java/android/widget/ScrollView.java b/core/java/android/widget/ScrollView.java index 0f0dbae..f912c66 100644 --- a/core/java/android/widget/ScrollView.java +++ b/core/java/android/widget/ScrollView.java @@ -482,6 +482,10 @@ public class ScrollView extends FrameLayout { if (mScrollStrictSpan == null) { mScrollStrictSpan = StrictMode.enterCriticalSpan("ScrollView-scroll"); } + final ViewParent parent = getParent(); + if (parent != null) { + parent.requestDisallowInterceptTouchEvent(true); + } } break; } @@ -546,10 +550,15 @@ public class ScrollView extends FrameLayout { switch (action & MotionEvent.ACTION_MASK) { case MotionEvent.ACTION_DOWN: { - mIsBeingDragged = getChildCount() != 0; - if (!mIsBeingDragged) { + if (getChildCount() == 0) { return false; } + if ((mIsBeingDragged = !mScroller.isFinished())) { + final ViewParent parent = getParent(); + if (parent != null) { + parent.requestDisallowInterceptTouchEvent(true); + } + } /* * If being flinged and user touches, stop the fling. isFinished @@ -569,11 +578,23 @@ public class ScrollView extends FrameLayout { break; } case MotionEvent.ACTION_MOVE: + final int activePointerIndex = ev.findPointerIndex(mActivePointerId); + final int y = (int) ev.getY(activePointerIndex); + int deltaY = mLastMotionY - y; + if (!mIsBeingDragged && Math.abs(deltaY) > mTouchSlop) { + final ViewParent parent = getParent(); + if (parent != null) { + parent.requestDisallowInterceptTouchEvent(true); + } + mIsBeingDragged = true; + if (deltaY > 0) { + deltaY -= mTouchSlop; + } else { + deltaY += mTouchSlop; + } + } if (mIsBeingDragged) { // Scroll to follow the motion event - final int activePointerIndex = ev.findPointerIndex(mActivePointerId); - final int y = (int) ev.getY(activePointerIndex); - final int deltaY = mLastMotionY - y; mLastMotionY = y; final int oldX = mScrollX; |
