summaryrefslogtreecommitdiffstats
path: root/core/java/android/view/ScaleGestureDetector.java
diff options
context:
space:
mode:
authorAdam Powell <adamp@google.com>2010-03-12 10:52:35 -0800
committerAdam Powell <adamp@google.com>2010-03-12 10:53:11 -0800
commit346c8fb036b99a33756c66dcebeb5d0f67a1df72 (patch)
tree74d4e83ffbd430ae3e304af67042269e8e6c86be /core/java/android/view/ScaleGestureDetector.java
parent34ec95de2f96a5f85d5e4e0f99252b99c0aca14f (diff)
downloadframeworks_base-346c8fb036b99a33756c66dcebeb5d0f67a1df72.zip
frameworks_base-346c8fb036b99a33756c66dcebeb5d0f67a1df72.tar.gz
frameworks_base-346c8fb036b99a33756c66dcebeb5d0f67a1df72.tar.bz2
Improvements to ScaleGestureDetector
Change-Id: I995bf7237a1de3ea194efdd21ed31156ff1c3c5b
Diffstat (limited to 'core/java/android/view/ScaleGestureDetector.java')
-rw-r--r--core/java/android/view/ScaleGestureDetector.java28
1 files changed, 20 insertions, 8 deletions
diff --git a/core/java/android/view/ScaleGestureDetector.java b/core/java/android/view/ScaleGestureDetector.java
index d8b6d1f..ff34f4a 100644
--- a/core/java/android/view/ScaleGestureDetector.java
+++ b/core/java/android/view/ScaleGestureDetector.java
@@ -18,6 +18,7 @@ package android.view;
import android.content.Context;
import android.util.DisplayMetrics;
+import android.util.FloatMath;
/**
* Detects transformation gestures involving more than one pointer ("multitouch")
@@ -96,14 +97,16 @@ public class ScaleGestureDetector {
* A convenience class to extend when you only want to listen for a subset
* of scaling-related events. This implements all methods in
* {@link OnScaleGestureListener} but does nothing.
- * {@link OnScaleGestureListener#onScale(ScaleGestureDetector)} and
- * {@link OnScaleGestureListener#onScaleBegin(ScaleGestureDetector)} return
+ * {@link OnScaleGestureListener#onScale(ScaleGestureDetector)} returns
+ * {@code false} so that a subclass can retrieve the accumulated scale
+ * factor in an overridden onScaleEnd.
+ * {@link OnScaleGestureListener#onScaleBegin(ScaleGestureDetector)} returns
* {@code true}.
*/
public static class SimpleOnScaleGestureListener implements OnScaleGestureListener {
public boolean onScale(ScaleGestureDetector detector) {
- return true;
+ return false;
}
public boolean onScaleBegin(ScaleGestureDetector detector) {
@@ -115,10 +118,19 @@ public class ScaleGestureDetector {
}
}
+ /**
+ * This value is the threshold ratio between our previous combined pressure
+ * and the current combined pressure. We will only fire an onScale event if
+ * the computed ratio between the current and previous event pressures is
+ * greater than this value. When pressure decreases rapidly between events
+ * the position values can often be imprecise, as it usually indicates
+ * that the user is in the process of lifting a pointer off of the device.
+ * Its value was tuned experimentally.
+ */
private static final float PRESSURE_THRESHOLD = 0.67f;
- private Context mContext;
- private OnScaleGestureListener mListener;
+ private final Context mContext;
+ private final OnScaleGestureListener mListener;
private boolean mGestureInProgress;
private MotionEvent mPrevEvent;
@@ -137,7 +149,7 @@ public class ScaleGestureDetector {
private float mPrevPressure;
private long mTimeDelta;
- private float mEdgeSlop;
+ private final float mEdgeSlop;
private float mRightSlopEdge;
private float mBottomSlopEdge;
private boolean mSloppyGesture;
@@ -410,7 +422,7 @@ public class ScaleGestureDetector {
if (mCurrLen == -1) {
final float cvx = mCurrFingerDiffX;
final float cvy = mCurrFingerDiffY;
- mCurrLen = (float)Math.sqrt(cvx*cvx + cvy*cvy);
+ mCurrLen = FloatMath.sqrt(cvx*cvx + cvy*cvy);
}
return mCurrLen;
}
@@ -425,7 +437,7 @@ public class ScaleGestureDetector {
if (mPrevLen == -1) {
final float pvx = mPrevFingerDiffX;
final float pvy = mPrevFingerDiffY;
- mPrevLen = (float)Math.sqrt(pvx*pvx + pvy*pvy);
+ mPrevLen = FloatMath.sqrt(pvx*pvx + pvy*pvy);
}
return mPrevLen;
}