From 44384cb4930d2e2250110efb5ff896f9ac587ebc Mon Sep 17 00:00:00 2001 From: Sorin Cioban Date: Sun, 31 May 2026 22:08:54 +0100 Subject: [PATCH] Fix Android pinch ending after pointer lift --- .../gesturehandler/core/PinchGestureHandler.kt | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/packages/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/core/PinchGestureHandler.kt b/packages/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/core/PinchGestureHandler.kt index 69b5a99ee2..0e4960a87e 100644 --- a/packages/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/core/PinchGestureHandler.kt +++ b/packages/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/core/PinchGestureHandler.kt @@ -88,7 +88,12 @@ class PinchGestureHandler : GestureHandler() { this.focalPointY = point.y } - if (sourceEvent.actionMasked == MotionEvent.ACTION_UP) { + val isLastRequiredPointerLifted = sourceEvent.actionMasked == MotionEvent.ACTION_POINTER_UP && + event.pointerCount - 1 < MIN_POINTERS + + if (sourceEvent.actionMasked == MotionEvent.ACTION_UP || + isLastRequiredPointerLifted + ) { when (state) { STATE_UNDETERMINED -> cancel() STATE_ACTIVE -> end() @@ -125,4 +130,8 @@ class PinchGestureHandler : GestureHandler() { override fun createEventBuilder(handler: PinchGestureHandler) = PinchGestureHandlerEventDataBuilder(handler) } + + companion object { + private const val MIN_POINTERS = 2 + } }