summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorJoe Onorato <joeo@google.com>2010-02-24 16:30:00 -0800
committerAndroid (Google) Code Review <android-gerrit@google.com>2010-02-24 16:30:00 -0800
commit618c8f1ede12d81fc4fee3d6fb239940f7e2023d (patch)
treeefb214aec4fc4be454ce99f2ada9de563a4383ed /core
parent27eb24148a935d10c2c490205174c59a47e76dc6 (diff)
parent9f0e8eeab2c9fdce182ad16fb28ad8fa3033eb75 (diff)
downloadframeworks_base-618c8f1ede12d81fc4fee3d6fb239940f7e2023d.zip
frameworks_base-618c8f1ede12d81fc4fee3d6fb239940f7e2023d.tar.gz
frameworks_base-618c8f1ede12d81fc4fee3d6fb239940f7e2023d.tar.bz2
Merge "Make ScrollView only do overscroll if you're grabbing the child view."
Diffstat (limited to 'core')
-rw-r--r--core/java/android/widget/ScrollView.java70
1 files changed, 49 insertions, 21 deletions
diff --git a/core/java/android/widget/ScrollView.java b/core/java/android/widget/ScrollView.java
index 52ed11d..bb3b07e 100644
--- a/core/java/android/widget/ScrollView.java
+++ b/core/java/android/widget/ScrollView.java
@@ -22,6 +22,7 @@ import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Rect;
import android.util.AttributeSet;
+import android.util.Log;
import android.view.FocusFinder;
import android.view.KeyEvent;
import android.view.MotionEvent;
@@ -51,6 +52,8 @@ import java.util.List;
* <p>ScrollView only supports vertical scrolling.
*/
public class ScrollView extends FrameLayout {
+ private static final String TAG = "ScrollView";
+
static final int ANIMATED_SCROLL_GAP = 250;
static final float MAX_SCROLL_FACTOR = 0.5f;
@@ -360,6 +363,17 @@ public class ScrollView extends FrameLayout {
return handled;
}
+ private boolean inChild(int x, int y) {
+ if (getChildCount() > 0) {
+ final View child = getChildAt(0);
+ return !(y < child.getTop()
+ || y >= child.getBottom()
+ || x < child.getLeft()
+ || x >= child.getRight());
+ }
+ return false;
+ }
+
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
/*
@@ -399,6 +413,11 @@ public class ScrollView extends FrameLayout {
break;
case MotionEvent.ACTION_DOWN:
+ if (!inChild((int)ev.getX(), (int)y)) {
+ mIsBeingDragged = false;
+ break;
+ }
+
/* Remember location of down touch */
mLastMotionY = y;
@@ -451,36 +470,45 @@ public class ScrollView extends FrameLayout {
mScroller.abortAnimation();
}
+ if (!inChild((int)ev.getX(), (int)y)) {
+ mIsBeingDragged = false;
+ return false;
+ }
+
// Remember where the motion event started
mLastMotionY = y;
break;
case MotionEvent.ACTION_MOVE:
- // Scroll to follow the motion event
- final int deltaY = (int) (mLastMotionY - y);
- mLastMotionY = y;
+ if (mIsBeingDragged) {
+ // Scroll to follow the motion event
+ final int deltaY = (int) (mLastMotionY - y);
+ mLastMotionY = y;
- overscrollBy(0, deltaY, 0, mScrollY, 0, getScrollRange(),
- 0, getOverscrollMax());
- break;
+ overscrollBy(0, deltaY, 0, mScrollY, 0, getScrollRange(),
+ 0, getOverscrollMax());
+ break;
+ }
case MotionEvent.ACTION_UP:
- final VelocityTracker velocityTracker = mVelocityTracker;
- velocityTracker.computeCurrentVelocity(1000, mMaximumVelocity);
- int initialVelocity = (int) velocityTracker.getYVelocity();
-
- if (getChildCount() > 0) {
- if ((Math.abs(initialVelocity) > mMinimumVelocity)) {
- fling(-initialVelocity);
- } else {
- final int bottom = getScrollRange();
- if (mScroller.springback(mScrollX, mScrollY, 0, 0, 0, bottom)) {
- invalidate();
+ if (mIsBeingDragged) {
+ final VelocityTracker velocityTracker = mVelocityTracker;
+ velocityTracker.computeCurrentVelocity(1000, mMaximumVelocity);
+ int initialVelocity = (int) velocityTracker.getYVelocity();
+
+ if (getChildCount() > 0) {
+ if ((Math.abs(initialVelocity) > mMinimumVelocity)) {
+ fling(-initialVelocity);
+ } else {
+ final int bottom = getScrollRange();
+ if (mScroller.springback(mScrollX, mScrollY, 0, 0, 0, bottom)) {
+ invalidate();
+ }
}
}
- }
- if (mVelocityTracker != null) {
- mVelocityTracker.recycle();
- mVelocityTracker = null;
+ if (mVelocityTracker != null) {
+ mVelocityTracker.recycle();
+ mVelocityTracker = null;
+ }
}
}
return true;