From aba194396b21b6a273fc5c4019c7c34771da3633 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82?= Date: Wed, 9 Sep 2026 12:12:19 +0200 Subject: [PATCH] Fix button disabling mid-gesture --- .../react/RNGestureHandlerButtonViewManager.kt | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/packages/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt b/packages/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt index d9df0dae3b..f964945a54 100644 --- a/packages/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt +++ b/packages/react-native-gesture-handler/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt @@ -1494,6 +1494,16 @@ class RNGestureHandlerButtonViewManager : return } + if (!enabled && isPressed) { + setPressed(false) + + // No finger lifted, so skip the press-out fade: it would overlap the + // restyle that usually comes with disabling and show as a flash. + pendingPressOut?.let { handler?.removeCallbacks(it) } + pendingPressOut = null + animateTo(restingOpacity, restingScale, restingUnderlayOpacity, 0) + } + // The managed handler mirrors the button's enabled state. managedHandlerNeedsUpdate = true