react-native-gesture-handler 1.10.3 → 2.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -6
- package/android/build.gradle +49 -1
- package/android/common/src/main/java/com/swmansion/common/GestureHandlerStateManager.kt +5 -0
- package/android/gradle.properties +19 -0
- package/android/lib/src/main/java/com/swmansion/gesturehandler/BaseGestureHandlerInteractionController.kt +18 -0
- package/android/lib/src/main/java/com/swmansion/gesturehandler/Extensions.kt +11 -0
- package/android/lib/src/main/java/com/swmansion/gesturehandler/FlingGestureHandler.kt +96 -0
- package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandler.kt +713 -0
- package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerInteractionController.kt +8 -0
- package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerOrchestrator.kt +562 -0
- package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerRegistry.kt +8 -0
- package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerRegistryImpl.kt +21 -0
- package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureUtils.kt +49 -0
- package/android/lib/src/main/java/com/swmansion/gesturehandler/LongPressGestureHandler.kt +97 -0
- package/android/lib/src/main/java/com/swmansion/gesturehandler/ManualGestureHandler.kt +11 -0
- package/android/lib/src/main/java/com/swmansion/gesturehandler/NativeViewGestureHandler.kt +129 -0
- package/android/lib/src/main/java/com/swmansion/gesturehandler/OnTouchEventListener.kt +9 -0
- package/android/lib/src/main/java/com/swmansion/gesturehandler/PanGestureHandler.kt +289 -0
- package/android/lib/src/main/java/com/swmansion/gesturehandler/PinchGestureHandler.kt +88 -0
- package/android/lib/src/main/java/com/swmansion/gesturehandler/{PointerEventsConfig.java → PointerEventsConfig.kt} +3 -5
- package/android/lib/src/main/java/com/swmansion/gesturehandler/RotationGestureDetector.kt +125 -0
- package/android/lib/src/main/java/com/swmansion/gesturehandler/RotationGestureHandler.kt +79 -0
- package/android/lib/src/main/java/com/swmansion/gesturehandler/TapGestureHandler.kt +167 -0
- package/android/lib/src/main/java/com/swmansion/gesturehandler/ViewConfigurationHelper.kt +10 -0
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt +348 -0
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEnabledRootView.kt +57 -0
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEvent.kt +59 -0
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEventDataExtractor.kt +8 -0
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerInteractionManager.kt +61 -0
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerModule.kt +686 -0
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerPackage.kt +17 -0
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRegistry.kt +95 -0
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootHelper.kt +132 -0
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootInterface.kt +5 -0
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootView.kt +68 -0
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootViewManager.kt +34 -0
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerStateChangeEvent.kt +66 -0
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerTouchEvent.kt +69 -0
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNViewConfigurationHelper.kt +51 -0
- package/ios/Handlers/RNFlingHandler.m +78 -5
- package/ios/Handlers/RNForceTouchHandler.m +29 -4
- package/ios/Handlers/RNLongPressHandler.m +105 -3
- package/ios/Handlers/RNManualHandler.h +4 -0
- package/ios/Handlers/RNManualHandler.m +73 -0
- package/ios/Handlers/RNNativeViewHandler.m +30 -2
- package/ios/Handlers/RNPanHandler.m +64 -4
- package/ios/Handlers/RNPinchHandler.m +61 -2
- package/ios/Handlers/RNRotationHandler.m +60 -1
- package/ios/Handlers/RNTapHandler.m +55 -8
- package/ios/RNGestureHandler.h +18 -4
- package/ios/RNGestureHandler.m +123 -13
- package/ios/RNGestureHandlerEvents.h +9 -0
- package/ios/RNGestureHandlerEvents.m +34 -0
- package/ios/RNGestureHandlerManager.h +7 -0
- package/ios/RNGestureHandlerManager.m +62 -34
- package/ios/RNGestureHandlerModule.m +39 -3
- package/ios/RNGestureHandlerPointerTracker.h +25 -0
- package/ios/RNGestureHandlerPointerTracker.m +237 -0
- package/ios/RNGestureHandlerRegistry.h +1 -0
- package/ios/RNGestureHandlerRegistry.m +10 -0
- package/ios/RNGestureHandlerStateManager.h +5 -0
- package/ios/RNManualActivationRecognizer.h +10 -0
- package/ios/RNManualActivationRecognizer.m +80 -0
- package/ios/RNRootViewGestureRecognizer.m +1 -1
- package/ios/RNTouchEventType.h +9 -0
- package/lib/commonjs/EventType.js +16 -0
- package/lib/commonjs/EventType.js.map +1 -0
- package/lib/commonjs/GestureHandlerRootView.android.js +1 -13
- package/lib/commonjs/GestureHandlerRootView.android.js.map +1 -1
- package/lib/commonjs/GestureHandlerRootView.js +11 -3
- package/lib/commonjs/GestureHandlerRootView.js.map +1 -1
- package/lib/commonjs/RNGestureHandlerModule.js +3 -1
- package/lib/commonjs/RNGestureHandlerModule.js.map +1 -1
- package/lib/commonjs/RNGestureHandlerModule.web.js +2 -2
- package/lib/commonjs/RNGestureHandlerModule.web.js.map +1 -1
- package/lib/commonjs/components/DrawerLayout.js +41 -37
- package/lib/commonjs/components/DrawerLayout.js.map +1 -1
- package/lib/commonjs/components/GestureButtons.js.map +1 -1
- package/lib/commonjs/components/GestureComponents.js +31 -12
- package/lib/commonjs/components/GestureComponents.js.map +1 -1
- package/lib/commonjs/components/Swipeable.js +10 -6
- package/lib/commonjs/components/Swipeable.js.map +1 -1
- package/lib/commonjs/components/touchables/GenericTouchable.js +2 -1
- package/lib/commonjs/components/touchables/GenericTouchable.js.map +1 -1
- package/lib/commonjs/components/touchables/TouchableOpacity.js +1 -1
- package/lib/commonjs/components/touchables/TouchableOpacity.js.map +1 -1
- package/lib/commonjs/gestureHandlerRootHOC.js +1 -1
- package/lib/commonjs/gestureHandlerRootHOC.js.map +1 -1
- package/lib/commonjs/handlers/FlingGestureHandler.js +23 -0
- package/lib/commonjs/handlers/FlingGestureHandler.js.map +1 -0
- package/lib/commonjs/handlers/ForceTouchGestureHandler.js +44 -0
- package/lib/commonjs/handlers/ForceTouchGestureHandler.js.map +1 -0
- package/lib/commonjs/handlers/LongPressGestureHandler.js +23 -0
- package/lib/commonjs/handlers/LongPressGestureHandler.js.map +1 -0
- package/lib/commonjs/handlers/NativeViewGestureHandler.js +6 -4
- package/lib/commonjs/handlers/NativeViewGestureHandler.js.map +1 -1
- package/lib/commonjs/handlers/PanGestureHandler.js +121 -0
- package/lib/commonjs/handlers/PanGestureHandler.js.map +1 -0
- package/lib/commonjs/handlers/PinchGestureHandler.js +21 -0
- package/lib/commonjs/handlers/PinchGestureHandler.js.map +1 -0
- package/lib/commonjs/handlers/RotationGestureHandler.js +21 -0
- package/lib/commonjs/handlers/RotationGestureHandler.js.map +1 -0
- package/lib/commonjs/handlers/TapGestureHandler.js +23 -0
- package/lib/commonjs/handlers/TapGestureHandler.js.map +1 -0
- package/lib/commonjs/handlers/createHandler.js +52 -83
- package/lib/commonjs/handlers/createHandler.js.map +1 -1
- package/lib/commonjs/handlers/gestureHandlerCommon.js +80 -0
- package/lib/commonjs/handlers/gestureHandlerCommon.js.map +1 -0
- package/lib/commonjs/handlers/gestures/GestureDetector.js +440 -0
- package/lib/commonjs/handlers/gestures/GestureDetector.js.map +1 -0
- package/lib/commonjs/handlers/gestures/eventReceiver.js +135 -0
- package/lib/commonjs/handlers/gestures/eventReceiver.js.map +1 -0
- package/lib/commonjs/handlers/gestures/flingGesture.js +34 -0
- package/lib/commonjs/handlers/gestures/flingGesture.js.map +1 -0
- package/lib/commonjs/handlers/gestures/forceTouchGesture.js +65 -0
- package/lib/commonjs/handlers/gestures/forceTouchGesture.js.map +1 -0
- package/lib/commonjs/handlers/gestures/gesture.js +193 -0
- package/lib/commonjs/handlers/gestures/gesture.js.map +1 -0
- package/lib/commonjs/handlers/gestures/gestureComposition.js +94 -0
- package/lib/commonjs/handlers/gestures/gestureComposition.js.map +1 -0
- package/lib/commonjs/handlers/gestures/gestureObjects.js +85 -0
- package/lib/commonjs/handlers/gestures/gestureObjects.js.map +1 -0
- package/lib/commonjs/handlers/gestures/gestureStateManager.js +58 -0
- package/lib/commonjs/handlers/gestures/gestureStateManager.js.map +1 -0
- package/lib/commonjs/handlers/gestures/longPressGesture.js +34 -0
- package/lib/commonjs/handlers/gestures/longPressGesture.js.map +1 -0
- package/lib/commonjs/handlers/gestures/manualGesture.js +31 -0
- package/lib/commonjs/handlers/gestures/manualGesture.js.map +1 -0
- package/lib/commonjs/handlers/gestures/nativeGesture.js +34 -0
- package/lib/commonjs/handlers/gestures/nativeGesture.js.map +1 -0
- package/lib/commonjs/handlers/gestures/panGesture.js +144 -0
- package/lib/commonjs/handlers/gestures/panGesture.js.map +1 -0
- package/lib/commonjs/handlers/gestures/pinchGesture.js +45 -0
- package/lib/commonjs/handlers/gestures/pinchGesture.js.map +1 -0
- package/lib/commonjs/handlers/gestures/reanimatedWrapper.js +24 -0
- package/lib/commonjs/handlers/gestures/reanimatedWrapper.js.map +1 -0
- package/lib/commonjs/handlers/gestures/rotationGesture.js +45 -0
- package/lib/commonjs/handlers/gestures/rotationGesture.js.map +1 -0
- package/lib/commonjs/handlers/gestures/tapGesture.js +59 -0
- package/lib/commonjs/handlers/gestures/tapGesture.js.map +1 -0
- package/lib/commonjs/handlers/handlersRegistry.js +31 -0
- package/lib/commonjs/handlers/handlersRegistry.js.map +1 -0
- package/lib/commonjs/index.js +146 -8
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/init.js +13 -0
- package/lib/commonjs/init.js.map +1 -0
- package/lib/commonjs/mocks.js +31 -2
- package/lib/commonjs/mocks.js.map +1 -1
- package/lib/commonjs/utils.js +15 -0
- package/lib/commonjs/utils.js.map +1 -0
- package/lib/commonjs/web/Errors.js +1 -1
- package/lib/commonjs/web/Errors.js.map +1 -1
- package/lib/commonjs/web/GestureHandler.js +4 -6
- package/lib/commonjs/web/GestureHandler.js.map +1 -1
- package/lib/commonjs/web/NodeManager.js +8 -2
- package/lib/commonjs/web/NodeManager.js.map +1 -1
- package/lib/module/EventType.js +8 -0
- package/lib/module/EventType.js.map +1 -0
- package/lib/module/GestureHandlerRootView.android.js +2 -14
- package/lib/module/GestureHandlerRootView.android.js.map +1 -1
- package/lib/module/GestureHandlerRootView.js +5 -1
- package/lib/module/GestureHandlerRootView.js.map +1 -1
- package/lib/module/RNGestureHandlerModule.js +3 -1
- package/lib/module/RNGestureHandlerModule.js.map +1 -1
- package/lib/module/RNGestureHandlerModule.web.js +2 -2
- package/lib/module/RNGestureHandlerModule.web.js.map +1 -1
- package/lib/module/components/DrawerLayout.js +43 -40
- package/lib/module/components/DrawerLayout.js.map +1 -1
- package/lib/module/components/GestureButtons.js.map +1 -1
- package/lib/module/components/GestureComponents.js +29 -11
- package/lib/module/components/GestureComponents.js.map +1 -1
- package/lib/module/components/Swipeable.js +9 -6
- package/lib/module/components/Swipeable.js.map +1 -1
- package/lib/module/components/touchables/GenericTouchable.js +2 -1
- package/lib/module/components/touchables/GenericTouchable.js.map +1 -1
- package/lib/module/components/touchables/TouchableOpacity.js +1 -1
- package/lib/module/components/touchables/TouchableOpacity.js.map +1 -1
- package/lib/module/gestureHandlerRootHOC.js +1 -1
- package/lib/module/gestureHandlerRootHOC.js.map +1 -1
- package/lib/module/handlers/FlingGestureHandler.js +10 -0
- package/lib/module/handlers/FlingGestureHandler.js.map +1 -0
- package/lib/module/handlers/ForceTouchGestureHandler.js +29 -0
- package/lib/module/handlers/ForceTouchGestureHandler.js.map +1 -0
- package/lib/module/handlers/LongPressGestureHandler.js +10 -0
- package/lib/module/handlers/LongPressGestureHandler.js.map +1 -0
- package/lib/module/handlers/NativeViewGestureHandler.js +4 -3
- package/lib/module/handlers/NativeViewGestureHandler.js.map +1 -1
- package/lib/module/handlers/PanGestureHandler.js +106 -0
- package/lib/module/handlers/PanGestureHandler.js.map +1 -0
- package/lib/module/handlers/PinchGestureHandler.js +9 -0
- package/lib/module/handlers/PinchGestureHandler.js.map +1 -0
- package/lib/module/handlers/RotationGestureHandler.js +9 -0
- package/lib/module/handlers/RotationGestureHandler.js.map +1 -0
- package/lib/module/handlers/TapGestureHandler.js +10 -0
- package/lib/module/handlers/TapGestureHandler.js.map +1 -0
- package/lib/module/handlers/createHandler.js +41 -76
- package/lib/module/handlers/createHandler.js.map +1 -1
- package/lib/module/handlers/gestureHandlerCommon.js +66 -0
- package/lib/module/handlers/gestureHandlerCommon.js.map +1 -0
- package/lib/module/handlers/gestures/GestureDetector.js +402 -0
- package/lib/module/handlers/gestures/GestureDetector.js.map +1 -0
- package/lib/module/handlers/gestures/eventReceiver.js +120 -0
- package/lib/module/handlers/gestures/eventReceiver.js.map +1 -0
- package/lib/module/handlers/gestures/flingGesture.js +24 -0
- package/lib/module/handlers/gestures/flingGesture.js.map +1 -0
- package/lib/module/handlers/gestures/forceTouchGesture.js +56 -0
- package/lib/module/handlers/gestures/forceTouchGesture.js.map +1 -0
- package/lib/module/handlers/gestures/gesture.js +175 -0
- package/lib/module/handlers/gestures/gesture.js.map +1 -0
- package/lib/module/handlers/gestures/gestureComposition.js +79 -0
- package/lib/module/handlers/gestures/gestureComposition.js.map +1 -0
- package/lib/module/handlers/gestures/gestureObjects.js +67 -0
- package/lib/module/handlers/gestures/gestureObjects.js.map +1 -0
- package/lib/module/handlers/gestures/gestureStateManager.js +48 -0
- package/lib/module/handlers/gestures/gestureStateManager.js.map +1 -0
- package/lib/module/handlers/gestures/longPressGesture.js +24 -0
- package/lib/module/handlers/gestures/longPressGesture.js.map +1 -0
- package/lib/module/handlers/gestures/manualGesture.js +22 -0
- package/lib/module/handlers/gestures/manualGesture.js.map +1 -0
- package/lib/module/handlers/gestures/nativeGesture.js +24 -0
- package/lib/module/handlers/gestures/nativeGesture.js.map +1 -0
- package/lib/module/handlers/gestures/panGesture.js +135 -0
- package/lib/module/handlers/gestures/panGesture.js.map +1 -0
- package/lib/module/handlers/gestures/pinchGesture.js +36 -0
- package/lib/module/handlers/gestures/pinchGesture.js.map +1 -0
- package/lib/module/handlers/gestures/reanimatedWrapper.js +19 -0
- package/lib/module/handlers/gestures/reanimatedWrapper.js.map +1 -0
- package/lib/module/handlers/gestures/rotationGesture.js +36 -0
- package/lib/module/handlers/gestures/rotationGesture.js.map +1 -0
- package/lib/module/handlers/gestures/tapGesture.js +49 -0
- package/lib/module/handlers/gestures/tapGesture.js.map +1 -0
- package/lib/module/handlers/handlersRegistry.js +16 -0
- package/lib/module/handlers/handlersRegistry.js.map +1 -0
- package/lib/module/index.js +22 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/init.js +5 -0
- package/lib/module/init.js.map +1 -0
- package/lib/module/mocks.js +31 -2
- package/lib/module/mocks.js.map +1 -1
- package/lib/module/utils.js +8 -0
- package/lib/module/utils.js.map +1 -0
- package/lib/module/web/Errors.js +1 -1
- package/lib/module/web/Errors.js.map +1 -1
- package/lib/module/web/GestureHandler.js +4 -6
- package/lib/module/web/GestureHandler.js.map +1 -1
- package/lib/module/web/NodeManager.js +8 -2
- package/lib/module/web/NodeManager.js.map +1 -1
- package/lib/typescript/EventType.d.ts +8 -0
- package/lib/typescript/GestureHandlerRootView.android.d.ts +2 -4
- package/lib/typescript/GestureHandlerRootView.d.ts +5 -2
- package/lib/typescript/RNGestureHandlerModule.d.ts +1 -1
- package/lib/typescript/RNGestureHandlerModule.web.d.ts +1 -1
- package/lib/typescript/components/DrawerLayout.d.ts +50 -1
- package/lib/typescript/components/GestureButtons.d.ts +36 -0
- package/lib/typescript/components/GestureComponents.d.ts +8 -35
- package/lib/typescript/components/Swipeable.d.ts +73 -6
- package/lib/typescript/components/touchables/GenericTouchable.d.ts +2 -2
- package/lib/typescript/components/touchables/TouchableHighlight.d.ts +1 -0
- package/lib/typescript/components/touchables/TouchableOpacity.d.ts +1 -0
- package/lib/typescript/handlers/FlingGestureHandler.d.ts +33 -0
- package/lib/typescript/handlers/ForceTouchGestureHandler.d.ts +43 -0
- package/lib/typescript/handlers/LongPressGestureHandler.d.ts +55 -0
- package/lib/typescript/handlers/NativeViewGestureHandler.d.ts +19 -4
- package/lib/typescript/handlers/PanGestureHandler.d.ts +137 -0
- package/lib/typescript/handlers/PinchGestureHandler.d.ts +28 -0
- package/lib/typescript/handlers/RotationGestureHandler.d.ts +28 -0
- package/lib/typescript/handlers/TapGestureHandler.d.ts +56 -0
- package/lib/typescript/handlers/createHandler.d.ts +1 -1
- package/lib/typescript/handlers/gestureHandlerCommon.d.ts +62 -0
- package/lib/typescript/handlers/gestureHandlerTypesCompat.d.ts +8 -1
- package/lib/typescript/handlers/gestures/GestureDetector.d.ts +16 -0
- package/lib/typescript/handlers/gestures/eventReceiver.d.ts +2 -0
- package/lib/typescript/handlers/gestures/flingGesture.d.ts +9 -0
- package/lib/typescript/handlers/gestures/forceTouchGesture.d.ts +16 -0
- package/lib/typescript/handlers/gestures/gesture.d.ts +97 -0
- package/lib/typescript/handlers/gestures/gestureComposition.d.ts +21 -0
- package/lib/typescript/handlers/gestures/gestureObjects.d.ts +39 -0
- package/lib/typescript/handlers/gestures/gestureStateManager.d.ts +9 -0
- package/lib/typescript/handlers/gestures/longPressGesture.d.ts +9 -0
- package/lib/typescript/handlers/gestures/manualGesture.d.ts +7 -0
- package/lib/typescript/handlers/gestures/nativeGesture.d.ts +9 -0
- package/lib/typescript/handlers/gestures/panGesture.d.ts +26 -0
- package/lib/typescript/handlers/gestures/pinchGesture.d.ts +12 -0
- package/lib/typescript/handlers/gestures/reanimatedWrapper.d.ts +14 -0
- package/lib/typescript/handlers/gestures/rotationGesture.d.ts +12 -0
- package/lib/typescript/handlers/gestures/tapGesture.d.ts +14 -0
- package/lib/typescript/handlers/handlersRegistry.d.ts +6 -0
- package/lib/typescript/index.d.ts +29 -2
- package/lib/typescript/init.d.ts +1 -0
- package/lib/typescript/mocks.d.ts +21 -2
- package/lib/typescript/utils.d.ts +1 -0
- package/lib/typescript/web/FlingGestureHandler.d.ts +0 -1
- package/lib/typescript/web/GestureHandler.d.ts +0 -1
- package/lib/typescript/web/PanGestureHandler.d.ts +0 -1
- package/lib/typescript/web/PinchGestureHandler.d.ts +0 -1
- package/lib/typescript/web/PressGestureHandler.d.ts +0 -1
- package/lib/typescript/web/RotationGestureHandler.d.ts +0 -1
- package/lib/typescript/web/TapGestureHandler.d.ts +0 -1
- package/package.json +8 -5
- package/src/EventType.ts +10 -0
- package/src/GestureHandlerRootView.android.tsx +9 -25
- package/src/GestureHandlerRootView.tsx +11 -2
- package/src/RNGestureHandlerModule.ts +5 -1
- package/src/RNGestureHandlerModule.web.ts +1 -0
- package/src/components/DrawerLayout.tsx +114 -41
- package/src/components/GestureButtons.tsx +45 -5
- package/src/components/GestureComponents.tsx +47 -41
- package/src/components/Swipeable.tsx +108 -21
- package/src/components/touchables/GenericTouchable.tsx +2 -1
- package/src/components/touchables/TouchableOpacity.tsx +1 -1
- package/src/handlers/FlingGestureHandler.ts +57 -0
- package/src/handlers/ForceTouchGestureHandler.ts +83 -0
- package/src/handlers/LongPressGestureHandler.ts +84 -0
- package/src/handlers/NativeViewGestureHandler.ts +31 -7
- package/src/handlers/PanGestureHandler.ts +321 -0
- package/src/handlers/PinchGestureHandler.ts +46 -0
- package/src/handlers/RotationGestureHandler.ts +46 -0
- package/src/handlers/TapGestureHandler.ts +90 -0
- package/src/handlers/createHandler.ts +54 -79
- package/src/handlers/gestureHandlerCommon.ts +185 -0
- package/src/handlers/gestureHandlerTypesCompat.ts +19 -5
- package/src/handlers/gestures/GestureDetector.tsx +519 -0
- package/src/handlers/gestures/eventReceiver.ts +151 -0
- package/src/handlers/gestures/flingGesture.ts +27 -0
- package/src/handlers/gestures/forceTouchGesture.ts +74 -0
- package/src/handlers/gestures/gesture.ts +292 -0
- package/src/handlers/gestures/gestureComposition.ts +109 -0
- package/src/handlers/gestures/gestureObjects.ts +79 -0
- package/src/handlers/gestures/gestureStateManager.ts +60 -0
- package/src/handlers/gestures/longPressGesture.ts +27 -0
- package/src/handlers/gestures/manualGesture.ts +31 -0
- package/src/handlers/gestures/nativeGesture.ts +27 -0
- package/src/handlers/gestures/panGesture.ts +147 -0
- package/src/handlers/gestures/pinchGesture.ts +51 -0
- package/src/handlers/gestures/reanimatedWrapper.ts +45 -0
- package/src/handlers/gestures/rotationGesture.ts +51 -0
- package/src/handlers/gestures/tapGesture.ts +52 -0
- package/src/handlers/handlersRegistry.ts +22 -0
- package/src/index.ts +57 -17
- package/src/init.ts +5 -0
- package/src/mocks.ts +42 -2
- package/src/utils.ts +7 -0
- package/src/web/GestureHandler.ts +1 -2
- package/src/web/NodeManager.ts +5 -0
- package/android/lib/src/main/java/com/swmansion/gesturehandler/BaseGestureHandlerInteractionController.java +0 -23
- package/android/lib/src/main/java/com/swmansion/gesturehandler/FlingGestureHandler.java +0 -110
- package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandler.java +0 -531
- package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerInteractionController.java +0 -8
- package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerOrchestrator.java +0 -543
- package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerRegistry.java +0 -10
- package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerRegistryImpl.java +0 -29
- package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureUtils.java +0 -53
- package/android/lib/src/main/java/com/swmansion/gesturehandler/LongPressGestureHandler.java +0 -81
- package/android/lib/src/main/java/com/swmansion/gesturehandler/NativeViewGestureHandler.java +0 -110
- package/android/lib/src/main/java/com/swmansion/gesturehandler/OnTouchEventListener.java +0 -8
- package/android/lib/src/main/java/com/swmansion/gesturehandler/PanGestureHandler.java +0 -312
- package/android/lib/src/main/java/com/swmansion/gesturehandler/PinchGestureHandler.java +0 -109
- package/android/lib/src/main/java/com/swmansion/gesturehandler/RotationGestureDetector.java +0 -169
- package/android/lib/src/main/java/com/swmansion/gesturehandler/RotationGestureHandler.java +0 -96
- package/android/lib/src/main/java/com/swmansion/gesturehandler/TapGestureHandler.java +0 -172
- package/android/lib/src/main/java/com/swmansion/gesturehandler/ViewConfigurationHelper.java +0 -10
- package/android/src/main/java/com/facebook/react/views/modal/RNGHModalUtils.java +0 -21
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.java +0 -296
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEnabledRootView.java +0 -72
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEvent.java +0 -77
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEventDataExtractor.java +0 -8
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerInteractionManager.java +0 -86
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerModule.java +0 -731
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerPackage.java +0 -31
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRegistry.java +0 -101
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootHelper.java +0 -151
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootInterface.java +0 -7
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootView.java +0 -76
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootViewManager.java +0 -49
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerStateChangeEvent.java +0 -82
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNViewConfigurationHelper.java +0 -61
- package/lib/commonjs/handlers/gestureHandlers.js +0 -236
- package/lib/commonjs/handlers/gestureHandlers.js.map +0 -1
- package/lib/module/handlers/gestureHandlers.js +0 -216
- package/lib/module/handlers/gestureHandlers.js.map +0 -1
- package/lib/typescript/handlers/gestureHandlers.d.ts +0 -158
- package/src/handlers/gestureHandlers.ts +0 -511
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
package com.swmansion.gesturehandler;
|
|
2
|
-
|
|
3
|
-
import android.content.Context;
|
|
4
|
-
import android.os.Handler;
|
|
5
|
-
import android.view.MotionEvent;
|
|
6
|
-
|
|
7
|
-
public class LongPressGestureHandler extends GestureHandler<LongPressGestureHandler> {
|
|
8
|
-
|
|
9
|
-
private static final long DEFAULT_MIN_DURATION_MS = 500; // 1 sec
|
|
10
|
-
private static float DEFAULT_MAX_DIST_DP = 10; // 20dp
|
|
11
|
-
|
|
12
|
-
private long mMinDurationMs = DEFAULT_MIN_DURATION_MS;
|
|
13
|
-
private float mMaxDistSq;
|
|
14
|
-
private float mStartX, mStartY;
|
|
15
|
-
private Handler mHandler;
|
|
16
|
-
|
|
17
|
-
public LongPressGestureHandler(Context context) {
|
|
18
|
-
setShouldCancelWhenOutside(true);
|
|
19
|
-
mMaxDistSq = DEFAULT_MAX_DIST_DP * context.getResources().getDisplayMetrics().density;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
public void setMinDurationMs(long minDurationMs) {
|
|
23
|
-
mMinDurationMs = minDurationMs;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
public LongPressGestureHandler setMaxDist(float maxDist) {
|
|
27
|
-
mMaxDistSq = maxDist * maxDist;
|
|
28
|
-
return this;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
@Override
|
|
32
|
-
protected void onHandle(MotionEvent event) {
|
|
33
|
-
if (getState() == STATE_UNDETERMINED) {
|
|
34
|
-
begin();
|
|
35
|
-
mStartX = event.getRawX();
|
|
36
|
-
mStartY = event.getRawY();
|
|
37
|
-
mHandler = new Handler();
|
|
38
|
-
if (mMinDurationMs > 0) {
|
|
39
|
-
mHandler.postDelayed(new Runnable() {
|
|
40
|
-
@Override
|
|
41
|
-
public void run() {
|
|
42
|
-
activate();
|
|
43
|
-
}
|
|
44
|
-
}, mMinDurationMs);
|
|
45
|
-
} else if (mMinDurationMs == 0) {
|
|
46
|
-
activate();
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
if (event.getActionMasked() == MotionEvent.ACTION_UP) {
|
|
50
|
-
if (mHandler != null) {
|
|
51
|
-
mHandler.removeCallbacksAndMessages(null);
|
|
52
|
-
mHandler = null;
|
|
53
|
-
}
|
|
54
|
-
if (getState() == STATE_ACTIVE) {
|
|
55
|
-
end();
|
|
56
|
-
} else {
|
|
57
|
-
fail();
|
|
58
|
-
}
|
|
59
|
-
} else {
|
|
60
|
-
// calculate distance from start
|
|
61
|
-
float deltaX = event.getRawX() - mStartX;
|
|
62
|
-
float deltaY = event.getRawY() - mStartY;
|
|
63
|
-
float distSq = deltaX * deltaX + deltaY * deltaY;
|
|
64
|
-
if (distSq > mMaxDistSq) {
|
|
65
|
-
if (getState() == STATE_ACTIVE) {
|
|
66
|
-
cancel();
|
|
67
|
-
} else {
|
|
68
|
-
fail();
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
@Override
|
|
75
|
-
protected void onStateChange(int newState, int previousState) {
|
|
76
|
-
if (mHandler != null) {
|
|
77
|
-
mHandler.removeCallbacksAndMessages(null);
|
|
78
|
-
mHandler = null;
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
}
|
package/android/lib/src/main/java/com/swmansion/gesturehandler/NativeViewGestureHandler.java
DELETED
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
package com.swmansion.gesturehandler;
|
|
2
|
-
|
|
3
|
-
import android.os.SystemClock;
|
|
4
|
-
import android.view.MotionEvent;
|
|
5
|
-
import android.view.View;
|
|
6
|
-
import android.view.ViewGroup;
|
|
7
|
-
|
|
8
|
-
public class NativeViewGestureHandler extends GestureHandler<NativeViewGestureHandler> {
|
|
9
|
-
|
|
10
|
-
private boolean mShouldActivateOnStart;
|
|
11
|
-
private boolean mDisallowInterruption;
|
|
12
|
-
|
|
13
|
-
public NativeViewGestureHandler() {
|
|
14
|
-
setShouldCancelWhenOutside(true);
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
public NativeViewGestureHandler setShouldActivateOnStart(boolean shouldActivateOnStart) {
|
|
18
|
-
mShouldActivateOnStart = shouldActivateOnStart;
|
|
19
|
-
return this;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* Set this to {@code true} when wrapping native components that are supposed to be an exclusive
|
|
24
|
-
* target for a touch stream. Like for example switch or slider component which when activated
|
|
25
|
-
* aren't supposed to be cancelled by scrollview or other container that may also handle touches.
|
|
26
|
-
*/
|
|
27
|
-
public NativeViewGestureHandler setDisallowInterruption(boolean disallowInterruption) {
|
|
28
|
-
mDisallowInterruption = disallowInterruption;
|
|
29
|
-
return this;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
@Override
|
|
33
|
-
public boolean shouldRequireToWaitForFailure(GestureHandler handler) {
|
|
34
|
-
return super.shouldRequireToWaitForFailure(handler);
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
@Override
|
|
38
|
-
public boolean shouldRecognizeSimultaneously(GestureHandler handler) {
|
|
39
|
-
if (handler instanceof NativeViewGestureHandler) {
|
|
40
|
-
// Special case when the peer handler is also an instance of NativeViewGestureHandler:
|
|
41
|
-
// For the `disallowInterruption` to work correctly we need to check the property when
|
|
42
|
-
// accessed as a peer, because simultaneous recognizers can be set on either side of the
|
|
43
|
-
// connection.
|
|
44
|
-
NativeViewGestureHandler nativeWrapper = (NativeViewGestureHandler) handler;
|
|
45
|
-
if (nativeWrapper.getState() == STATE_ACTIVE && nativeWrapper.mDisallowInterruption) {
|
|
46
|
-
// other handler is active and it disallows interruption, we don't want to get into its way
|
|
47
|
-
return false;
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
boolean canBeInterrupted = !mDisallowInterruption;
|
|
52
|
-
int state = getState();
|
|
53
|
-
int otherState = handler.getState();
|
|
54
|
-
|
|
55
|
-
if (state == STATE_ACTIVE && otherState == STATE_ACTIVE && canBeInterrupted) {
|
|
56
|
-
// if both handlers are active and the current handler can be interruped it we return `false`
|
|
57
|
-
// as it means the other handler has turned active and returning `true` would prevent it from
|
|
58
|
-
// interrupting the current handler
|
|
59
|
-
return false;
|
|
60
|
-
}
|
|
61
|
-
// otherwise we can only return `true` if already in an active state
|
|
62
|
-
return state == STATE_ACTIVE && canBeInterrupted;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
@Override
|
|
66
|
-
public boolean shouldBeCancelledBy(GestureHandler handler) {
|
|
67
|
-
return !mDisallowInterruption;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
@Override
|
|
71
|
-
protected void onHandle(MotionEvent event) {
|
|
72
|
-
View view = getView();
|
|
73
|
-
int state = getState();
|
|
74
|
-
if (event.getActionMasked() == MotionEvent.ACTION_UP) {
|
|
75
|
-
view.onTouchEvent(event);
|
|
76
|
-
if ((state == STATE_UNDETERMINED || state == STATE_BEGAN) && view.isPressed()) {
|
|
77
|
-
activate();
|
|
78
|
-
}
|
|
79
|
-
end();
|
|
80
|
-
} else if (state == STATE_UNDETERMINED || state == STATE_BEGAN) {
|
|
81
|
-
if (mShouldActivateOnStart) {
|
|
82
|
-
tryIntercept(view, event);
|
|
83
|
-
view.onTouchEvent(event);
|
|
84
|
-
activate();
|
|
85
|
-
} else if (tryIntercept(view, event)) {
|
|
86
|
-
view.onTouchEvent(event);
|
|
87
|
-
activate();
|
|
88
|
-
} else if (state != STATE_BEGAN) {
|
|
89
|
-
begin();
|
|
90
|
-
}
|
|
91
|
-
} else if (state == STATE_ACTIVE) {
|
|
92
|
-
view.onTouchEvent(event);
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
private static boolean tryIntercept(View view, MotionEvent event) {
|
|
97
|
-
if (view instanceof ViewGroup && ((ViewGroup) view).onInterceptTouchEvent(event)) {
|
|
98
|
-
return true;
|
|
99
|
-
}
|
|
100
|
-
return false;
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
@Override
|
|
104
|
-
protected void onCancel() {
|
|
105
|
-
long time = SystemClock.uptimeMillis();
|
|
106
|
-
MotionEvent event = MotionEvent.obtain(time, time, MotionEvent.ACTION_CANCEL, 0, 0, 0);
|
|
107
|
-
event.setAction(MotionEvent.ACTION_CANCEL);
|
|
108
|
-
getView().onTouchEvent(event);
|
|
109
|
-
}
|
|
110
|
-
}
|
|
@@ -1,312 +0,0 @@
|
|
|
1
|
-
package com.swmansion.gesturehandler;
|
|
2
|
-
|
|
3
|
-
import android.content.Context;
|
|
4
|
-
import android.view.MotionEvent;
|
|
5
|
-
import android.view.VelocityTracker;
|
|
6
|
-
import android.view.ViewConfiguration;
|
|
7
|
-
|
|
8
|
-
public class PanGestureHandler extends GestureHandler<PanGestureHandler> {
|
|
9
|
-
|
|
10
|
-
private static float MIN_VALUE_IGNORE = Float.MAX_VALUE;
|
|
11
|
-
private static float MAX_VALUE_IGNORE = Float.MIN_VALUE;
|
|
12
|
-
|
|
13
|
-
private static int DEFAULT_MIN_POINTERS = 1;
|
|
14
|
-
private static int DEFAULT_MAX_POINTERS = 10;
|
|
15
|
-
|
|
16
|
-
private float mMinDistSq = MAX_VALUE_IGNORE;
|
|
17
|
-
|
|
18
|
-
private float mActiveOffsetXStart = MIN_VALUE_IGNORE;
|
|
19
|
-
private float mActiveOffsetXEnd = MAX_VALUE_IGNORE;
|
|
20
|
-
|
|
21
|
-
private float mFailOffsetXStart = MAX_VALUE_IGNORE;
|
|
22
|
-
private float mFailOffsetXEnd = MIN_VALUE_IGNORE;
|
|
23
|
-
|
|
24
|
-
private float mActiveOffsetYStart = MIN_VALUE_IGNORE;
|
|
25
|
-
private float mActiveOffsetYEnd = MAX_VALUE_IGNORE;
|
|
26
|
-
|
|
27
|
-
private float mFailOffsetYStart = MAX_VALUE_IGNORE;
|
|
28
|
-
private float mFailOffsetYEnd = MIN_VALUE_IGNORE;
|
|
29
|
-
|
|
30
|
-
private float mMinVelocityX = MIN_VALUE_IGNORE;
|
|
31
|
-
private float mMinVelocityY = MIN_VALUE_IGNORE;
|
|
32
|
-
private float mMinVelocitySq = MIN_VALUE_IGNORE;
|
|
33
|
-
private int mMinPointers = DEFAULT_MIN_POINTERS;
|
|
34
|
-
private int mMaxPointers = DEFAULT_MAX_POINTERS;
|
|
35
|
-
|
|
36
|
-
private float mStartX, mStartY;
|
|
37
|
-
private float mOffsetX, mOffsetY;
|
|
38
|
-
private float mLastX, mLastY;
|
|
39
|
-
private float mLastVelocityX, mLastVelocityY;
|
|
40
|
-
private VelocityTracker mVelocityTracker;
|
|
41
|
-
|
|
42
|
-
private boolean mAverageTouches;
|
|
43
|
-
|
|
44
|
-
/**
|
|
45
|
-
* On Android when there are multiple pointers on the screen pan gestures most often just consider
|
|
46
|
-
* the last placed pointer. The behaviour on iOS is quite different where the x and y component
|
|
47
|
-
* of the pan pointer is calculated as an average out of all the pointers placed on the screen.
|
|
48
|
-
*
|
|
49
|
-
* This behaviour can be customized on android by setting averageTouches property of the handler
|
|
50
|
-
* object. This could be useful in particular for the usecases when we attach other handlers that
|
|
51
|
-
* recognizes multi-finger gestures such as rotation. In that case when we only rely on the last
|
|
52
|
-
* placed finger it is easier for the gesture handler to trigger when we do a rotation gesture
|
|
53
|
-
* because each finger when treated separately will travel some distance, whereas the average
|
|
54
|
-
* position of all the fingers will remain still while doing a rotation gesture.
|
|
55
|
-
*/
|
|
56
|
-
public PanGestureHandler(Context context) {
|
|
57
|
-
ViewConfiguration vc = ViewConfiguration.get(context);
|
|
58
|
-
int touchSlop = vc.getScaledTouchSlop();
|
|
59
|
-
mMinDistSq = touchSlop * touchSlop;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
public PanGestureHandler setActiveOffsetXStart(float activeOffsetXStart) {
|
|
63
|
-
mActiveOffsetXStart = activeOffsetXStart;
|
|
64
|
-
return this;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
public PanGestureHandler setActiveOffsetXEnd(float activeOffsetXEnd) {
|
|
68
|
-
mActiveOffsetXEnd = activeOffsetXEnd;
|
|
69
|
-
return this;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
public PanGestureHandler setFailOffsetXStart(float failOffsetXStart) {
|
|
73
|
-
mFailOffsetXStart = failOffsetXStart;
|
|
74
|
-
return this;
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
public PanGestureHandler setFailOffsetXEnd(float failOffsetXEnd) {
|
|
78
|
-
mFailOffsetXEnd = failOffsetXEnd;
|
|
79
|
-
return this;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
public PanGestureHandler setActiveOffsetYStart(float activeOffsetYStart) {
|
|
83
|
-
mActiveOffsetYStart = activeOffsetYStart;
|
|
84
|
-
return this;
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
public PanGestureHandler setActiveOffsetYEnd(float activeOffsetYEnd) {
|
|
88
|
-
mActiveOffsetYEnd = activeOffsetYEnd;
|
|
89
|
-
return this;
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
public PanGestureHandler setFailOffsetYStart(float failOffsetYStart) {
|
|
93
|
-
mFailOffsetYStart = failOffsetYStart;
|
|
94
|
-
return this;
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
public PanGestureHandler setFailOffsetYEnd(float failOffsetYEnd) {
|
|
98
|
-
mFailOffsetYEnd = failOffsetYEnd;
|
|
99
|
-
return this;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
public PanGestureHandler setMinDist(float minDist) {
|
|
103
|
-
mMinDistSq = minDist * minDist;
|
|
104
|
-
return this;
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
public PanGestureHandler setMinPointers(int minPointers) {
|
|
108
|
-
mMinPointers = minPointers;
|
|
109
|
-
return this;
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
public PanGestureHandler setMaxPointers(int maxPointers) {
|
|
113
|
-
mMaxPointers = maxPointers;
|
|
114
|
-
return this;
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
public PanGestureHandler setAverageTouches(boolean averageTouches) {
|
|
118
|
-
mAverageTouches = averageTouches;
|
|
119
|
-
return this;
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
/**
|
|
123
|
-
* @param minVelocity in pixels per second
|
|
124
|
-
*/
|
|
125
|
-
public PanGestureHandler setMinVelocity(float minVelocity) {
|
|
126
|
-
mMinVelocitySq = minVelocity * minVelocity;
|
|
127
|
-
return this;
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
public PanGestureHandler setMinVelocityX(float minVelocityX) {
|
|
131
|
-
mMinVelocityX = minVelocityX;
|
|
132
|
-
return this;
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
public PanGestureHandler setMinVelocityY(float minVelocityY) {
|
|
136
|
-
mMinVelocityY = minVelocityY;
|
|
137
|
-
return this;
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
private boolean shouldActivate() {
|
|
141
|
-
float dx = mLastX - mStartX + mOffsetX;
|
|
142
|
-
if (mActiveOffsetXStart != MIN_VALUE_IGNORE && dx < mActiveOffsetXStart) {
|
|
143
|
-
return true;
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
if (mActiveOffsetXEnd != MAX_VALUE_IGNORE && dx > mActiveOffsetXEnd) {
|
|
147
|
-
return true;
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
float dy = mLastY - mStartY + mOffsetY;
|
|
151
|
-
if (mActiveOffsetYStart != MIN_VALUE_IGNORE && dy < mActiveOffsetYStart) {
|
|
152
|
-
return true;
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
if (mActiveOffsetYEnd != MAX_VALUE_IGNORE && dy > mActiveOffsetYEnd) {
|
|
156
|
-
return true;
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
float distSq = dx * dx + dy * dy;
|
|
160
|
-
if (mMinDistSq != MIN_VALUE_IGNORE && distSq >= mMinDistSq) {
|
|
161
|
-
return true;
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
float vx = mLastVelocityX;
|
|
165
|
-
if (mMinVelocityX != MIN_VALUE_IGNORE &&
|
|
166
|
-
((mMinVelocityX < 0 && vx <= mMinVelocityX) || (mMinVelocityX >= 0 && vx >= mMinVelocityX))) {
|
|
167
|
-
return true;
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
float vy = mLastVelocityY;
|
|
171
|
-
if (mMinVelocityY != MIN_VALUE_IGNORE &&
|
|
172
|
-
((mMinVelocityY < 0 && vx <= mMinVelocityY) || (mMinVelocityY >= 0 && vx >= mMinVelocityY))) {
|
|
173
|
-
return true;
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
float velocitySq = vx * vx + vy * vy;
|
|
177
|
-
if (mMinVelocitySq != MIN_VALUE_IGNORE && velocitySq >= mMinVelocitySq) {
|
|
178
|
-
return true;
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
return false;
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
private boolean shouldFail() {
|
|
185
|
-
float dx = mLastX - mStartX + mOffsetX;
|
|
186
|
-
|
|
187
|
-
if (mFailOffsetXStart != MAX_VALUE_IGNORE && dx < mFailOffsetXStart) {
|
|
188
|
-
return true;
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
if (mFailOffsetXEnd != MIN_VALUE_IGNORE && dx > mFailOffsetXEnd) {
|
|
192
|
-
return true;
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
float dy = mLastY - mStartY + mOffsetY;
|
|
197
|
-
if (mFailOffsetYStart != MAX_VALUE_IGNORE && dy < mFailOffsetYStart) {
|
|
198
|
-
return true;
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
if (mFailOffsetYEnd != MIN_VALUE_IGNORE && dy > mFailOffsetYEnd) {
|
|
202
|
-
return true;
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
return false;
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
@Override
|
|
209
|
-
protected void onHandle(MotionEvent event) {
|
|
210
|
-
int state = getState();
|
|
211
|
-
int action = event.getActionMasked();
|
|
212
|
-
|
|
213
|
-
if (action == MotionEvent.ACTION_POINTER_UP || action == MotionEvent.ACTION_POINTER_DOWN) {
|
|
214
|
-
// update offset if new pointer gets added or removed
|
|
215
|
-
mOffsetX += mLastX - mStartX;
|
|
216
|
-
mOffsetY += mLastY - mStartY;
|
|
217
|
-
|
|
218
|
-
// reset starting point
|
|
219
|
-
mLastX = GestureUtils.getLastPointerX(event, mAverageTouches);
|
|
220
|
-
mLastY = GestureUtils.getLastPointerY(event, mAverageTouches);
|
|
221
|
-
mStartX = mLastX;
|
|
222
|
-
mStartY = mLastY;
|
|
223
|
-
} else {
|
|
224
|
-
mLastX = GestureUtils.getLastPointerX(event, mAverageTouches);
|
|
225
|
-
mLastY = GestureUtils.getLastPointerY(event, mAverageTouches);
|
|
226
|
-
}
|
|
227
|
-
|
|
228
|
-
if (state == STATE_UNDETERMINED && event.getPointerCount() >= mMinPointers) {
|
|
229
|
-
mStartX = mLastX;
|
|
230
|
-
mStartY = mLastY;
|
|
231
|
-
mOffsetX = 0;
|
|
232
|
-
mOffsetY = 0;
|
|
233
|
-
mVelocityTracker = VelocityTracker.obtain();
|
|
234
|
-
addVelocityMovement(mVelocityTracker, event);
|
|
235
|
-
begin();
|
|
236
|
-
} else if (mVelocityTracker != null) {
|
|
237
|
-
addVelocityMovement(mVelocityTracker, event);
|
|
238
|
-
mVelocityTracker.computeCurrentVelocity(1000);
|
|
239
|
-
mLastVelocityX = mVelocityTracker.getXVelocity();
|
|
240
|
-
mLastVelocityY = mVelocityTracker.getYVelocity();
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
if (action == MotionEvent.ACTION_UP) {
|
|
244
|
-
if (state == STATE_ACTIVE || state == STATE_BEGAN) {
|
|
245
|
-
end();
|
|
246
|
-
} else {
|
|
247
|
-
fail();
|
|
248
|
-
}
|
|
249
|
-
} else if (action == MotionEvent.ACTION_POINTER_DOWN && event.getPointerCount() > mMaxPointers) {
|
|
250
|
-
// When new finger is placed down (POINTER_DOWN) we check if MAX_POINTERS is not exceeded
|
|
251
|
-
if (state == STATE_ACTIVE) {
|
|
252
|
-
cancel();
|
|
253
|
-
} else {
|
|
254
|
-
fail();
|
|
255
|
-
}
|
|
256
|
-
} else if (action == MotionEvent.ACTION_POINTER_UP && state == STATE_ACTIVE
|
|
257
|
-
&& event.getPointerCount() < mMinPointers) {
|
|
258
|
-
// When finger is lifted up (POINTER_UP) and the number of pointers falls below MIN_POINTERS
|
|
259
|
-
// threshold, we only want to take an action when the handler has already activated. Otherwise
|
|
260
|
-
// we can still expect more fingers to be placed on screen and fulfill MIN_POINTERS criteria.
|
|
261
|
-
fail();
|
|
262
|
-
} else if (state == STATE_BEGAN) {
|
|
263
|
-
if (shouldFail()) {
|
|
264
|
-
fail();
|
|
265
|
-
} else if (shouldActivate()) {
|
|
266
|
-
// reset starting point
|
|
267
|
-
mStartX = mLastX;
|
|
268
|
-
mStartY = mLastY;
|
|
269
|
-
activate();
|
|
270
|
-
}
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
@Override
|
|
275
|
-
protected void onReset() {
|
|
276
|
-
if (mVelocityTracker != null) {
|
|
277
|
-
mVelocityTracker.recycle();
|
|
278
|
-
mVelocityTracker = null;
|
|
279
|
-
}
|
|
280
|
-
}
|
|
281
|
-
|
|
282
|
-
public float getTranslationX() {
|
|
283
|
-
return mLastX - mStartX + mOffsetX;
|
|
284
|
-
}
|
|
285
|
-
|
|
286
|
-
public float getTranslationY() {
|
|
287
|
-
return mLastY - mStartY + mOffsetY;
|
|
288
|
-
}
|
|
289
|
-
|
|
290
|
-
public float getVelocityX() {
|
|
291
|
-
return mLastVelocityX;
|
|
292
|
-
}
|
|
293
|
-
|
|
294
|
-
public float getVelocityY() {
|
|
295
|
-
return mLastVelocityY;
|
|
296
|
-
}
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
/**
|
|
300
|
-
* This method adds movement to {@class VelocityTracker} first resetting offset of the event so
|
|
301
|
-
* that the velocity is calculated based on the absolute position of touch pointers. This is
|
|
302
|
-
* because if the underlying view moves along with the finger using relative x/y coords yields
|
|
303
|
-
* incorrect results.
|
|
304
|
-
*/
|
|
305
|
-
private static void addVelocityMovement(VelocityTracker tracker, MotionEvent event) {
|
|
306
|
-
float offsetX = event.getRawX() - event.getX();
|
|
307
|
-
float offsetY = event.getRawY() - event.getY();
|
|
308
|
-
event.offsetLocation(offsetX, offsetY);
|
|
309
|
-
tracker.addMovement(event);
|
|
310
|
-
event.offsetLocation(-offsetX, -offsetY);
|
|
311
|
-
}
|
|
312
|
-
}
|
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
package com.swmansion.gesturehandler;
|
|
2
|
-
|
|
3
|
-
import android.content.Context;
|
|
4
|
-
import android.view.MotionEvent;
|
|
5
|
-
import android.view.ScaleGestureDetector;
|
|
6
|
-
import android.view.ViewConfiguration;
|
|
7
|
-
|
|
8
|
-
public class PinchGestureHandler extends GestureHandler<PinchGestureHandler> {
|
|
9
|
-
|
|
10
|
-
private ScaleGestureDetector mScaleGestureDetector;
|
|
11
|
-
private double mLastScaleFactor;
|
|
12
|
-
private double mLastVelocity;
|
|
13
|
-
|
|
14
|
-
private float mStartingSpan;
|
|
15
|
-
private float mSpanSlop;
|
|
16
|
-
|
|
17
|
-
private ScaleGestureDetector.OnScaleGestureListener mGestureListener =
|
|
18
|
-
new ScaleGestureDetector.OnScaleGestureListener() {
|
|
19
|
-
|
|
20
|
-
@Override
|
|
21
|
-
public boolean onScale(ScaleGestureDetector detector) {
|
|
22
|
-
double prevScaleFactor = mLastScaleFactor;
|
|
23
|
-
mLastScaleFactor *= detector.getScaleFactor();
|
|
24
|
-
long delta = detector.getTimeDelta();
|
|
25
|
-
if (delta > 0) {
|
|
26
|
-
mLastVelocity = (mLastScaleFactor - prevScaleFactor) / delta;
|
|
27
|
-
}
|
|
28
|
-
if (Math.abs(mStartingSpan - detector.getCurrentSpan()) >= mSpanSlop
|
|
29
|
-
&& getState() == STATE_BEGAN) {
|
|
30
|
-
activate();
|
|
31
|
-
}
|
|
32
|
-
return true;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
@Override
|
|
36
|
-
public boolean onScaleBegin(ScaleGestureDetector detector) {
|
|
37
|
-
mStartingSpan = detector.getCurrentSpan();
|
|
38
|
-
return true;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
@Override
|
|
42
|
-
public void onScaleEnd(ScaleGestureDetector detector) {
|
|
43
|
-
// ScaleGestureDetector thinks that when fingers are 27mm away that's a sufficiently good
|
|
44
|
-
// reason to trigger this method giving us no other choice but to ignore it completely.
|
|
45
|
-
}
|
|
46
|
-
};
|
|
47
|
-
|
|
48
|
-
public PinchGestureHandler() {
|
|
49
|
-
setShouldCancelWhenOutside(false);
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
@Override
|
|
53
|
-
protected void onHandle(MotionEvent event) {
|
|
54
|
-
if (getState() == STATE_UNDETERMINED) {
|
|
55
|
-
Context context = getView().getContext();
|
|
56
|
-
mLastVelocity = 0f;
|
|
57
|
-
mLastScaleFactor = 1f;
|
|
58
|
-
mScaleGestureDetector = new ScaleGestureDetector(context, mGestureListener);
|
|
59
|
-
ViewConfiguration configuration = ViewConfiguration.get(context);
|
|
60
|
-
mSpanSlop = configuration.getScaledTouchSlop();
|
|
61
|
-
|
|
62
|
-
begin();
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
if (mScaleGestureDetector != null) {
|
|
66
|
-
mScaleGestureDetector.onTouchEvent(event);
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
int activePointers = event.getPointerCount();
|
|
70
|
-
if (event.getActionMasked() == MotionEvent.ACTION_POINTER_UP) {
|
|
71
|
-
activePointers -= 1;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
if (getState() == STATE_ACTIVE && activePointers < 2) {
|
|
75
|
-
end();
|
|
76
|
-
} else if (event.getActionMasked() == MotionEvent.ACTION_UP) {
|
|
77
|
-
fail();
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
@Override
|
|
82
|
-
protected void onReset() {
|
|
83
|
-
mScaleGestureDetector = null;
|
|
84
|
-
mLastVelocity = 0f;
|
|
85
|
-
mLastScaleFactor = 1f;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
public double getScale() {
|
|
89
|
-
return mLastScaleFactor;
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
public double getVelocity() {
|
|
93
|
-
return mLastVelocity;
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
public float getFocalPointX() {
|
|
97
|
-
if (mScaleGestureDetector == null) {
|
|
98
|
-
return Float.NaN;
|
|
99
|
-
}
|
|
100
|
-
return mScaleGestureDetector.getFocusX();
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
public float getFocalPointY() {
|
|
104
|
-
if (mScaleGestureDetector == null) {
|
|
105
|
-
return Float.NaN;
|
|
106
|
-
}
|
|
107
|
-
return mScaleGestureDetector.getFocusY();
|
|
108
|
-
}
|
|
109
|
-
}
|