@@ -137,6 +137,7 @@ public void onScaleEnd(ScaleGestureDetector detector) {
137137 private long mPrevTime ;
138138 private boolean mInProgress ;
139139 private int mSpanSlop ;
140+ private int mMinSpan ;
140141
141142 /**
142143 * Consistency verifier for debugging purposes.
@@ -149,6 +150,8 @@ public ScaleGestureDetector(Context context, OnScaleGestureListener listener) {
149150 mContext = context ;
150151 mListener = listener ;
151152 mSpanSlop = ViewConfiguration .get (context ).getScaledTouchSlop () * 2 ;
153+ mMinSpan = context .getResources ().getDimensionPixelSize (
154+ com .android .internal .R .dimen .config_minScalingSpan );
152155 }
153156
154157 /**
@@ -209,8 +212,12 @@ public boolean onTouchEvent(MotionEvent event) {
209212 float devSumX = 0 , devSumY = 0 ;
210213 for (int i = 0 ; i < count ; i ++) {
211214 if (skipIndex == i ) continue ;
212- devSumX += Math .abs (event .getX (i ) - focusX );
213- devSumY += Math .abs (event .getY (i ) - focusY );
215+
216+ // touchMajor/Minor are axes of an ellipse; average them together and
217+ // convert the resulting 'diameter' into a radius.
218+ final float touchSize = (event .getTouchMajor (i ) + event .getTouchMinor (i )) / 4 ;
219+ devSumX += Math .abs (event .getX (i ) - focusX ) + touchSize ;
220+ devSumY += Math .abs (event .getY (i ) - focusY ) + touchSize ;
214221 }
215222 final float devX = devSumX / div ;
216223 final float devY = devSumY / div ;
@@ -228,7 +235,7 @@ public boolean onTouchEvent(MotionEvent event) {
228235 final boolean wasInProgress = mInProgress ;
229236 mFocusX = focusX ;
230237 mFocusY = focusY ;
231- if (mInProgress && (span == 0 || configChanged )) {
238+ if (mInProgress && (span < mMinSpan || configChanged )) {
232239 mListener .onScaleEnd (this );
233240 mInProgress = false ;
234241 mInitialSpan = span ;
@@ -238,7 +245,7 @@ public boolean onTouchEvent(MotionEvent event) {
238245 mPrevSpanY = mCurrSpanY = spanY ;
239246 mInitialSpan = mPrevSpan = mCurrSpan = span ;
240247 }
241- if (!mInProgress && span != 0 &&
248+ if (!mInProgress && span > mMinSpan &&
242249 (wasInProgress || Math .abs (span - mInitialSpan ) > mSpanSlop )) {
243250 mPrevSpanX = mCurrSpanX = spanX ;
244251 mPrevSpanY = mCurrSpanY = spanY ;
0 commit comments