在 React Native 的 Android 系统中,Pan Responder 绑定 transform 会出现问题。解决方法是使用 Animated 组件替换 transform。具体操作如下:
import { Animated } from 'react-native';
// 更改前 transform: [{ translateX: pan.x }, { translateY: pan.y }]
// 更改后 style={{ transform: [ { translateX: Animated.add(offset.x, pan.x) }, { translateY: Animated.add(offset.y, pan.y) } ] }}
const pan = useRef(new Animated.ValueXY()).current; const offset = useRef({ x: 0, y: 0 }).current;
const onPanResponderMove = Animated.event( [ null, { dx: pan.x, dy: pan.y } ], { useNativeDriver: false } );
const onPanResponderRelease = (event, gestureState) => { offset.x += gestureState.dx; offset.y += gestureState.dy; pan.setOffset(offset); pan.setValue({ x: 0, y: 0 }); };
const panResponder = useRef( PanResponder.create({ onMoveShouldSetPanResponder: () => true, onPanResponderMove: onPanResponderMove, onPanResponderRelease: onPanResponderRelease }) ).current;
运用以上方法,即可解决在 Android react native 中使用 transform 后 Pan Responder 无法正常工作的问题。