* Copyright (c) 2024 Huawei Technologies Co., Ltd.
*
* This source code is licensed under the MIT license found in the
* LICENSE-MIT file in the root directory of this source tree.
*/
import React, { useRef, useEffect } from 'react';
import { View, PanResponder, Animated, Text, ScrollView } from 'react-native';
export function CursorExample() {
const pan = useRef(new Animated.ValueXY()).current;
const panResponder = useRef(
PanResponder.create({
onStartShouldSetPanResponder: () => true,
onPanResponderMove: Animated.event([null, { dx: pan.x, dy: pan.y }]),
onPanResponderRelease: () => {
Animated.timing(pan, {
toValue: { x: 0, y: 0 },
useNativeDriver: true,
}).start();
},
}),
).current;
useEffect(() => {
pan.setOffset({ x: 0, y: 0 });
pan.setValue({ x: 0, y: 0 });
}, []);
return (
<View style={{ flex: 1 }}>
<ScrollView style={{ height: 600 }}>
<View style={{ height: 500, width: '100%', backgroundColor: 'silver' }} />
<View style={{ height: 500, width: '100%', backgroundColor: 'gray' }} />
</ScrollView>
<Animated.View
{...panResponder.panHandlers}
style={[
{ transform: pan.getTranslateTransform() },
{ width: 50, height: 50, backgroundColor: 'red', position: 'absolute' },
]}>
<Text style={{ width: '100%', height: '100%' }}>Drag me around</Text>
</Animated.View>
</View>
);
}