diff --git a/core/java/android/view/ScaleGestureDetector.java b/core/java/android/view/ScaleGestureDetector.java index bcb8800621e15..7d896809de646 100644 --- a/core/java/android/view/ScaleGestureDetector.java +++ b/core/java/android/view/ScaleGestureDetector.java @@ -137,6 +137,7 @@ public class ScaleGestureDetector { private long mPrevTime; private boolean mInProgress; private int mSpanSlop; + private int mMinSpan; /** * Consistency verifier for debugging purposes. @@ -149,6 +150,8 @@ public class ScaleGestureDetector { mContext = context; mListener = listener; mSpanSlop = ViewConfiguration.get(context).getScaledTouchSlop() * 2; + mMinSpan = context.getResources().getDimensionPixelSize( + com.android.internal.R.dimen.config_minScalingSpan); } /** @@ -209,8 +212,12 @@ public class ScaleGestureDetector { float devSumX = 0, devSumY = 0; for (int i = 0; i < count; i++) { if (skipIndex == i) continue; - devSumX += Math.abs(event.getX(i) - focusX); - devSumY += Math.abs(event.getY(i) - focusY); + + // touchMajor/Minor are axes of an ellipse; average them together and + // convert the resulting 'diameter' into a radius. + final float touchSize = (event.getTouchMajor(i) + event.getTouchMinor(i)) / 4; + devSumX += Math.abs(event.getX(i) - focusX) + touchSize; + devSumY += Math.abs(event.getY(i) - focusY) + touchSize; } final float devX = devSumX / div; final float devY = devSumY / div; @@ -228,7 +235,7 @@ public class ScaleGestureDetector { final boolean wasInProgress = mInProgress; mFocusX = focusX; mFocusY = focusY; - if (mInProgress && (span == 0 || configChanged)) { + if (mInProgress && (span < mMinSpan || configChanged)) { mListener.onScaleEnd(this); mInProgress = false; mInitialSpan = span; @@ -238,7 +245,7 @@ public class ScaleGestureDetector { mPrevSpanY = mCurrSpanY = spanY; mInitialSpan = mPrevSpan = mCurrSpan = span; } - if (!mInProgress && span != 0 && + if (!mInProgress && span > mMinSpan && (wasInProgress || Math.abs(span - mInitialSpan) > mSpanSlop)) { mPrevSpanX = mCurrSpanX = spanX; mPrevSpanY = mCurrSpanY = spanY; diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index 7895489257798..c97c2140704ae 100755 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -925,4 +925,10 @@ 1 + + + 25mm diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index adeced7b95c50..d4e82b5b616aa 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -1112,6 +1112,8 @@ + +