react-native - 反应原生圈拖动变换平移动画
问题描述
嗨,我怎样才能拖动图像弧(圆)线。我关注了一个他们使用 PanResponder 的主题,但只能自由拖动。我只是在拖动时接受图像跟随弧(圆)线,如下所示:
这是可以使拖动自由方向的代码。我知道我们可以计算 translateX: this.state.pan.x 和 translateY: this.state.pan.y 但不知道该怎么做:
import React, {
Component
} from 'react';
import {
StyleSheet,
View,
Text,
PanResponder,
Animated,
Easing,
Dimensions
} from 'react-native';
export default class Viewport extends Component {
constructor(props) {
super(props);
this.state = {
showDraggable: true,
dropZoneValues: null,
pan: new Animated.ValueXY(0)
};
this.panResponder = PanResponder.create({
onStartShouldSetPanResponder: () => true,
onPanResponderMove: Animated.event([
null, {
dx: this.state.pan.x,
dy: this.state.pan.y
},
], {
listener: (event, gestureState) => console.log(event.nativeEvent)
}),
onPanResponderRelease: (e, gesture) => {
Animated.spring(this.state.pan, {
toValue: {
x: 0,
y: 0
}
}).start();
}
});
}
getStyle() {
return [
styles.circle,
{
transform: [{
translateX: this.state.pan.x
},
{
translateY: this.state.pan.y
}
]
}
];
}
render() {
return ( <
View style = {
styles.mainContainer
} > {
this.renderDraggable()
} <
/View>
);
}
renderDraggable() {
if (this.state.showDraggable) {
return ( <
View style = {
styles.draggableContainer
} >
<
Animated.View { ...this.panResponder.panHandlers
}
style = {
this.getStyle()
} >
<
/Animated.View> <
/View>
);
}
}
}
let CIRCLE_RADIUS = 36;
let Window = Dimensions.get('window');
let styles = StyleSheet.create({
mainContainer: {
flex: 1
},
text: {
marginTop: 25,
marginLeft: 5,
marginRight: 5,
textAlign: 'center',
color: '#fff'
},
draggableContainer: {
position: 'absolute',
top: Window.height / 2 - CIRCLE_RADIUS,
left: Window.width / 2 - CIRCLE_RADIUS
},
circle: {
backgroundColor: '#1abc9c',
width: CIRCLE_RADIUS * 2,
height: CIRCLE_RADIUS * 2,
borderRadius: CIRCLE_RADIUS
}
});
解决方案
推荐阅读
- r - 将具有多个输出的函数应用于按 tidyverse 中的因子拆分的数据帧
- php - 在 Laravel 搜索中显示来自多个不同表的数据
- python - 在 flask-restx / flask-restplus 的字段中允许空值
- visual-studio - “IIdentity”不包含“Score”的定义
- javascript - HTML 中的按钮 onclick 功能不断将表单输入字段重置为默认值。我怎样才能避免这种情况?
- python - 使用 AgglomerativeClustering 算法训练模型时出现内存错误
- azure-functions - Azure 函数有时会在出队时启动多个实例
- firebase - 构建函数返回 null ,相关的导致错误的小部件是:StreamBuilder
- python - 如何为 Dask 数据框中的列分配值
- wordpress - 如何删除 woocommerce 订单电子邮件中的图像裁剪