66public class PanGestureHandler extends GestureHandler <PanGestureHandler > {
77
88 private static float MIN_VALUE_IGNORE = Float .MAX_VALUE ;
9+ private static float MAX_VALUE_IGNORE = Float .MIN_VALUE ;
910
1011 private static float DEFAULT_MIN_DISTANCE = 10.0f ;
1112 private static int DEFAULT_MIN_POINTERS = 1 ;
@@ -15,6 +16,8 @@ public class PanGestureHandler extends GestureHandler<PanGestureHandler> {
1516 private float mMinOffsetY = MIN_VALUE_IGNORE ;
1617 private float mMinDeltaX = MIN_VALUE_IGNORE ;
1718 private float mMinDeltaY = MIN_VALUE_IGNORE ;
19+ private float mMaxDeltaX = MAX_VALUE_IGNORE ;
20+ private float mMaxDeltaY = MAX_VALUE_IGNORE ;
1821 private float mMinDistSq = DEFAULT_MIN_DISTANCE * DEFAULT_MIN_DISTANCE ;
1922 private float mMinVelocityX = MIN_VALUE_IGNORE ;
2023 private float mMinVelocityY = MIN_VALUE_IGNORE ;
@@ -100,6 +103,16 @@ public PanGestureHandler setMinDy(float deltaY) {
100103 return this ;
101104 }
102105
106+ public PanGestureHandler setMaxDx (float deltaX ) {
107+ mMaxDeltaX = deltaX ;
108+ return this ;
109+ }
110+
111+ public PanGestureHandler setMaxDy (float deltaY ) {
112+ mMaxDeltaY = deltaY ;
113+ return this ;
114+ }
115+
103116 public PanGestureHandler setMinOffsetX (float offsetX ) {
104117 mMinOffsetX = offsetX ;
105118 return this ;
@@ -192,6 +205,20 @@ private boolean shouldActivate() {
192205 return false ;
193206 }
194207
208+ private boolean shouldFail () {
209+ float dx = mLastX - mStartX + mOffsetX ;
210+ if (mMaxDeltaX != MAX_VALUE_IGNORE && Math .abs (dx ) > mMaxDeltaX ) {
211+ return true ;
212+ }
213+
214+ float dy = mLastY - mStartY + mOffsetY ;
215+ if (mMaxDeltaY != MAX_VALUE_IGNORE && Math .abs (dy ) > mMaxDeltaY ) {
216+ return true ;
217+ }
218+
219+ return false ;
220+ }
221+
195222 @ Override
196223 protected void onHandle (MotionEvent event ) {
197224 int state = getState ();
@@ -241,7 +268,9 @@ protected void onHandle(MotionEvent event) {
241268 fail ();
242269 }
243270 } else if (state == STATE_BEGAN ) {
244- if (shouldActivate ()) {
271+ if (shouldFail ()) {
272+ fail ();
273+ } else if (shouldActivate ()) {
245274 // reset starting point
246275 mStartX = mLastX ;
247276 mStartY = mLastY ;
0 commit comments