react-native-gesture-handler 1.10.3 → 2.2.0
Sign up to get free protection for your applications and to get access to all the features.
- package/README.md +10 -8
- 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 +744 -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 +596 -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 +292 -0
- package/android/lib/src/main/java/com/swmansion/gesturehandler/PinchGestureHandler.kt +90 -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 +81 -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/RNGestureHandler.xcodeproj/project.xcworkspace/xcuserdata/jakubpiasecki.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- package/ios/RNGestureHandler.xcodeproj/xcuserdata/jakubpiasecki.xcuserdatad/xcschemes/xcschememanagement.plist +19 -0
- 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 +65 -84
- 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 +40 -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 +55 -77
- 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 +11 -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 +67 -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
|
-
}
|