summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMindy DelliCarpini <mindyp@google.com>2013-09-23 18:58:52 -0700
committerAndroid Git Automerger <android-git-automerger@android.com>2013-09-23 18:58:52 -0700
commit4da1a31becd996771b40c4cc0c639a340cc15d17 (patch)
tree9a213b44a152419d00d2580c8b4a7883cf1c54e4
parent2566e8d70697d5245580a592ec5f665879c942c1 (diff)
parent69d49ba36ecf8b6288c196f2fe5e3795dfe1486e (diff)
downloadphotoviewer-4da1a31becd996771b40c4cc0c639a340cc15d17.tar.gz
am 69d49ba3: Don\'t scale on double tap if there is movement before an up event
* commit '69d49ba36ecf8b6288c196f2fe5e3795dfe1486e': Don't scale on double tap if there is movement before an up event
-rw-r--r--src/com/android/ex/photo/views/PhotoView.java54
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);