Skip to content

Commit 5f38881

Browse files
committed
Implement maxDeltaX/Y for android.
1 parent edca7cd commit 5f38881

File tree

2 files changed

+39
-2
lines changed

2 files changed

+39
-2
lines changed

android/lib/src/main/java/com/swmansion/gesturehandler/PanGestureHandler.java

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
public 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;

android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerModule.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@ public class RNGestureHandlerModule extends ReactContextBaseJavaModule {
4949
private static final String KEY_LONG_PRESS_MIN_DURATION_MS = "minDurationMs";
5050
private static final String KEY_PAN_MIN_DELTA_X = "minDeltaX";
5151
private static final String KEY_PAN_MIN_DELTA_Y = "minDeltaY";
52+
private static final String KEY_PAN_MAX_DELTA_X = "maxDeltaX";
53+
private static final String KEY_PAN_MAX_DELTA_Y = "maxDeltaY";
5254
private static final String KEY_PAN_MIN_OFFSET_X = "minOffsetX";
5355
private static final String KEY_PAN_MIN_OFFSET_Y = "minOffsetY";
5456
private static final String KEY_PAN_MIN_DIST = "minDist";
@@ -200,6 +202,12 @@ public void configure(PanGestureHandler handler, ReadableMap config) {
200202
if (config.hasKey(KEY_PAN_MIN_DELTA_Y)) {
201203
handler.setMinDy(PixelUtil.toPixelFromDIP(config.getDouble(KEY_PAN_MIN_DELTA_Y)));
202204
}
205+
if (config.hasKey(KEY_PAN_MAX_DELTA_X)) {
206+
handler.setMaxDx(PixelUtil.toPixelFromDIP(config.getDouble(KEY_PAN_MAX_DELTA_X)));
207+
}
208+
if (config.hasKey(KEY_PAN_MAX_DELTA_Y)) {
209+
handler.setMaxDy(PixelUtil.toPixelFromDIP(config.getDouble(KEY_PAN_MAX_DELTA_Y)));
210+
}
203211
if (config.hasKey(KEY_PAN_MIN_OFFSET_X)) {
204212
handler.setMinOffsetX(PixelUtil.toPixelFromDIP(config.getDouble(KEY_PAN_MIN_OFFSET_X)));
205213
}
@@ -226,7 +234,7 @@ public void configure(PanGestureHandler handler, ReadableMap config) {
226234
handler.setMinPointers(config.getInt(KEY_PAN_MIN_POINTERS));
227235
}
228236
if (config.hasKey(KEY_PAN_MAX_POINTERS)) {
229-
handler.setMinPointers(config.getInt(KEY_PAN_MAX_POINTERS));
237+
handler.setMaxPointers(config.getInt(KEY_PAN_MAX_POINTERS));
230238
}
231239
if (config.hasKey(KEY_PAN_AVG_TOUCHES)) {
232240
handler.setAverageTouches(config.getBoolean(KEY_PAN_AVG_TOUCHES));

0 commit comments

Comments
 (0)