summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAdam Powell <adamp@google.com>2012-08-31 17:15:32 -0700
committerAdam Powell <adamp@google.com>2012-09-04 14:42:11 -0700
commit47ec2fb37046797bebc82b505a13c552021b9ff3 (patch)
treedf90e36eb75aeae59ca9356a74f00f5347ab0f64
parent167611811d4fd6318bc366128590701274488e84 (diff)
downloadframeworks_base-47ec2fb37046797bebc82b505a13c552021b9ff3.zip
frameworks_base-47ec2fb37046797bebc82b505a13c552021b9ff3.tar.gz
frameworks_base-47ec2fb37046797bebc82b505a13c552021b9ff3.tar.bz2
Delay starting scale gesture events until a touch slop threshold
Change-Id: I13132ce1d912b54e251f7afed5143c72a2ec2e78
-rw-r--r--core/java/android/view/ScaleGestureDetector.java24
1 files changed, 16 insertions, 8 deletions
diff --git a/core/java/android/view/ScaleGestureDetector.java b/core/java/android/view/ScaleGestureDetector.java
index dc36088..bcb8800 100644
--- a/core/java/android/view/ScaleGestureDetector.java
+++ b/core/java/android/view/ScaleGestureDetector.java
@@ -86,8 +86,8 @@ public class ScaleGestureDetector {
* pointers going up.
*
* Once a scale has ended, {@link ScaleGestureDetector#getFocusX()}
- * and {@link ScaleGestureDetector#getFocusY()} will return the location
- * of the pointer remaining on the screen.
+ * and {@link ScaleGestureDetector#getFocusY()} will return focal point
+ * of the pointers remaining on the screen.
*
* @param detector The detector reporting the event - use this to
* retrieve extended info about event state.
@@ -128,6 +128,7 @@ public class ScaleGestureDetector {
private float mCurrSpan;
private float mPrevSpan;
+ private float mInitialSpan;
private float mCurrSpanX;
private float mCurrSpanY;
private float mPrevSpanX;
@@ -135,6 +136,7 @@ public class ScaleGestureDetector {
private long mCurrTime;
private long mPrevTime;
private boolean mInProgress;
+ private int mSpanSlop;
/**
* Consistency verifier for debugging purposes.
@@ -146,6 +148,7 @@ public class ScaleGestureDetector {
public ScaleGestureDetector(Context context, OnScaleGestureListener listener) {
mContext = context;
mListener = listener;
+ mSpanSlop = ViewConfiguration.get(context).getScaledTouchSlop() * 2;
}
/**
@@ -176,6 +179,7 @@ public class ScaleGestureDetector {
if (mInProgress) {
mListener.onScaleEnd(this);
mInProgress = false;
+ mInitialSpan = 0;
}
if (streamComplete) {
@@ -221,18 +225,24 @@ public class ScaleGestureDetector {
// Dispatch begin/end events as needed.
// If the configuration changes, notify the app to reset its current state by beginning
// a fresh scale event stream.
+ final boolean wasInProgress = mInProgress;
+ mFocusX = focusX;
+ mFocusY = focusY;
if (mInProgress && (span == 0 || configChanged)) {
mListener.onScaleEnd(this);
mInProgress = false;
+ mInitialSpan = span;
}
if (configChanged) {
mPrevSpanX = mCurrSpanX = spanX;
mPrevSpanY = mCurrSpanY = spanY;
- mPrevSpan = mCurrSpan = span;
+ mInitialSpan = mPrevSpan = mCurrSpan = span;
}
- if (!mInProgress && span != 0) {
- mFocusX = focusX;
- mFocusY = focusY;
+ if (!mInProgress && span != 0 &&
+ (wasInProgress || Math.abs(span - mInitialSpan) > mSpanSlop)) {
+ mPrevSpanX = mCurrSpanX = spanX;
+ mPrevSpanY = mCurrSpanY = spanY;
+ mPrevSpan = mCurrSpan = span;
mInProgress = mListener.onScaleBegin(this);
}
@@ -241,8 +251,6 @@ public class ScaleGestureDetector {
mCurrSpanX = spanX;
mCurrSpanY = spanY;
mCurrSpan = span;
- mFocusX = focusX;
- mFocusY = focusY;
boolean updatePrev = true;
if (mInProgress) {