diff options
author | Mindy Pereira <mindyp@google.com> | 2013-09-17 17:10:16 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2013-09-17 17:10:16 -0700 |
commit | 3c6ad3cbd3c5d0a7a0c10c125777fc66bac3607c (patch) | |
tree | 9a213b44a152419d00d2580c8b4a7883cf1c54e4 | |
parent | 9c4c15e6061bd3e9bb0cd50ed2245512c85250e4 (diff) | |
parent | 7323508df106bf97cb6bd5d9aa480173558d84a3 (diff) | |
download | photoviewer-3c6ad3cbd3c5d0a7a0c10c125777fc66bac3607c.tar.gz |
am 7323508d: Don\'t scale on double tap if there is movement before an up event
* commit '7323508df106bf97cb6bd5d9aa480173558d84a3':
Don't scale on double tap if there is movement before an up event
-rw-r--r-- | src/com/android/ex/photo/views/PhotoView.java | 54 |
1 files changed, 37 insertions, 17 deletions
diff --git a/src/com/android/ex/photo/views/PhotoView.java b/src/com/android/ex/photo/views/PhotoView.java index a2e7107..7ba096d 100644 --- a/src/com/android/ex/photo/views/PhotoView.java +++ b/src/com/android/ex/photo/views/PhotoView.java @@ -28,6 +28,7 @@ import android.graphics.Rect; import android.graphics.RectF; import android.graphics.drawable.BitmapDrawable; import android.support.v4.view.GestureDetectorCompat; +import android.support.v4.view.ScaleGestureDetectorCompat; import android.util.AttributeSet; import android.view.GestureDetector.OnGestureListener; import android.view.GestureDetector.OnDoubleTapListener; @@ -174,6 +175,11 @@ public class PhotoView extends View implements OnGestureListener, private float mDownFocusX; private float mDownFocusY; + /** + * Whether the QuickSale gesture is enabled. + */ + private boolean mQuickScaleEnabled; + public PhotoView(Context context) { super(context); initialize(); @@ -215,6 +221,9 @@ public class PhotoView extends View implements OnGestureListener, @Override public boolean onDoubleTap(MotionEvent e) { mDoubleTapOccurred = true; + if (!mQuickScaleEnabled) { + return scale(e); + } return false; } @@ -225,28 +234,18 @@ public class PhotoView extends View implements OnGestureListener, switch (action) { case MotionEvent.ACTION_DOWN: - mDownFocusX = e.getX(); - mDownFocusY = e.getY(); + if (mQuickScaleEnabled) { + mDownFocusX = e.getX(); + mDownFocusY = e.getY(); + } break; case MotionEvent.ACTION_UP: - if (mDoubleTapToZoomEnabled && mTransformsEnabled && mDoubleTapOccurred) { - if (!mDoubleTapDebounce) { - float currentScale = getScale(); - float targetScale = currentScale * DOUBLE_TAP_SCALE_FACTOR; - - // Ensure the target scale is within our bounds - targetScale = Math.max(mMinScale, targetScale); - targetScale = Math.min(mMaxScale, targetScale); - - mScaleRunnable.start(currentScale, targetScale, e.getX(), e.getY()); - } - mDoubleTapDebounce = false; + if (mQuickScaleEnabled) { + handled = scale(e); } - handled = true; - mDoubleTapOccurred = false; break; case MotionEvent.ACTION_MOVE: - if (mDoubleTapOccurred) { + if (mQuickScaleEnabled && mDoubleTapOccurred) { final int deltaX = (int) (e.getX() - mDownFocusX); final int deltaY = (int) (e.getY() - mDownFocusY); int distance = (deltaX * deltaX) + (deltaY * deltaY); @@ -260,6 +259,26 @@ public class PhotoView extends View implements OnGestureListener, return handled; } + private boolean scale(MotionEvent e) { + boolean handled = false; + if (mDoubleTapToZoomEnabled && mTransformsEnabled && mDoubleTapOccurred) { + if (!mDoubleTapDebounce) { + float currentScale = getScale(); + float targetScale = currentScale * DOUBLE_TAP_SCALE_FACTOR; + + // Ensure the target scale is within our bounds + targetScale = Math.max(mMinScale, targetScale); + targetScale = Math.min(mMaxScale, targetScale); + + mScaleRunnable.start(currentScale, targetScale, e.getX(), e.getY()); + handled = true; + } + mDoubleTapDebounce = false; + } + mDoubleTapOccurred = false; + return handled; + } + @Override public boolean onSingleTapConfirmed(MotionEvent e) { if (mExternalClickListener != null && !mIsDoubleTouch) { @@ -987,6 +1006,7 @@ public class PhotoView extends View implements OnGestureListener, mGestureDetector = new GestureDetectorCompat(context, this, null); mScaleGetureDetector = new ScaleGestureDetector(context, this); + mQuickScaleEnabled = ScaleGestureDetectorCompat.isQuickScaleEnabled(mScaleGetureDetector); mScaleRunnable = new ScaleRunnable(this); mTranslateRunnable = new TranslateRunnable(this); mSnapRunnable = new SnapRunnable(this); |