diff options
author | Adam Powell <adamp@google.com> | 2010-03-12 10:52:35 -0800 |
---|---|---|
committer | Adam Powell <adamp@google.com> | 2010-03-12 10:53:11 -0800 |
commit | 346c8fb036b99a33756c66dcebeb5d0f67a1df72 (patch) | |
tree | 74d4e83ffbd430ae3e304af67042269e8e6c86be /core/java/android/view/ScaleGestureDetector.java | |
parent | 34ec95de2f96a5f85d5e4e0f99252b99c0aca14f (diff) | |
download | frameworks_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.java | 28 |
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; } |