Never drag scroll views with no children. (DO NOT MERGE)

Fixes a regression from Froyo.  Previously, when a scroll view
had no children, its onTouchEvent would return because the scroll
view would only start dragging if the user touched one of its children.
In Gingerbread, the user can drag from anywhere within the scroll
view, not just by touching a child.  However, it makes no sense
to drag a scroll view that has no children so an empty scroll view
should just ignore touches like any other empty view group would.

This change fixes applications that for some reason or other happen
to have empty scroll views in strange places.

Bug: 3246230
Change-Id: I76c6136d3cd74968983033014d60deec1718ce30
This commit is contained in:
Jeff Brown
2011-01-18 18:22:48 -08:00
parent b735aa0b6f
commit 39bc6197ba
2 changed files with 11 additions and 7 deletions

View File

@@ -502,8 +502,10 @@ public class HorizontalScrollView extends FrameLayout {
switch (action & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN: {
final float x = ev.getX();
mIsBeingDragged = true;
mIsBeingDragged = getChildCount() != 0;
if (!mIsBeingDragged) {
return false;
}
/*
* If being flinged and user touches, stop the fling. isFinished
@@ -514,7 +516,7 @@ public class HorizontalScrollView extends FrameLayout {
}
// Remember where the motion event started
mLastMotionX = x;
mLastMotionX = ev.getX();
mActivePointerId = ev.getPointerId(0);
break;
}

View File

@@ -497,9 +497,11 @@ public class ScrollView extends FrameLayout {
switch (action & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN: {
final float y = ev.getY();
mIsBeingDragged = true;
mIsBeingDragged = getChildCount() != 0;
if (!mIsBeingDragged) {
return false;
}
/*
* If being flinged and user touches, stop the fling. isFinished
* will be false if being flinged.
@@ -509,7 +511,7 @@ public class ScrollView extends FrameLayout {
}
// Remember where the motion event started
mLastMotionY = y;
mLastMotionY = ev.getY();
mActivePointerId = ev.getPointerId(0);
break;
}