diff options
| author | Adam Powell <adamp@google.com> | 2011-02-28 13:32:17 -0800 |
|---|---|---|
| committer | Adam Powell <adamp@google.com> | 2011-02-28 13:33:33 -0800 |
| commit | 0fe4a135b78e3ee993dd5111cc3e48a5b48952fb (patch) | |
| tree | 250162629a06cb95b151555c4c6188e32b255c7b /core/java | |
| parent | 7719436342611a106df5d379fedf180a5dd0809e (diff) | |
Fix some bugs in the new ScaleGestureDetector logic.
Lifting an active pointer now properly ends/begins a new gesture.
Fix out of bounds errors.
Change-Id: I29cb802785b886f65e7fc16fa7d2870f9219a3c6
Diffstat (limited to 'core/java')
| -rw-r--r-- | core/java/android/view/ScaleGestureDetector.java | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/core/java/android/view/ScaleGestureDetector.java b/core/java/android/view/ScaleGestureDetector.java index 218ee4f9885a..0124151b5ddc 100644 --- a/core/java/android/view/ScaleGestureDetector.java +++ b/core/java/android/view/ScaleGestureDetector.java @@ -245,6 +245,7 @@ public class ScaleGestureDetector { final float bottomSlop = mBottomSlopEdge; int index0 = event.findPointerIndex(mActiveId0); int index1 = event.findPointerIndex(mActiveId1); + float x0 = getRawX(event, index0); float y0 = getRawY(event, index0); float x1 = getRawX(event, index1); @@ -353,14 +354,24 @@ public class ScaleGestureDetector { if (actionId == mActiveId0) { final int newIndex = findNewActiveIndex(event, mActiveId1, actionIndex); if (newIndex >= 0) { + mListener.onScaleEnd(this); mActiveId0 = event.getPointerId(newIndex); + mActive0MostRecent = true; + mPrevEvent = MotionEvent.obtain(event); + setContext(event); + mGestureInProgress = mListener.onScaleBegin(this); } else { gestureEnded = true; } } else if (actionId == mActiveId1) { final int newIndex = findNewActiveIndex(event, mActiveId0, actionIndex); if (newIndex >= 0) { + mListener.onScaleEnd(this); mActiveId1 = event.getPointerId(newIndex); + mActive0MostRecent = false; + mPrevEvent = MotionEvent.obtain(event); + setContext(event); + mGestureInProgress = mListener.onScaleBegin(this); } else { gestureEnded = true; } @@ -449,6 +460,7 @@ public class ScaleGestureDetector { * MotionEvent has no getRawX(int) method; simulate it pending future API approval. */ private static float getRawX(MotionEvent event, int pointerIndex) { + if (pointerIndex < 0) return Float.MIN_VALUE; if (pointerIndex == 0) return event.getRawX(); float offset = event.getRawX() - event.getX(); return event.getX(pointerIndex) + offset; @@ -458,6 +470,7 @@ public class ScaleGestureDetector { * MotionEvent has no getRawY(int) method; simulate it pending future API approval. */ private static float getRawY(MotionEvent event, int pointerIndex) { + if (pointerIndex < 0) return Float.MIN_VALUE; if (pointerIndex == 0) return event.getRawY(); float offset = event.getRawY() - event.getY(); return event.getY(pointerIndex) + offset; |
