我已经使用 panResponder 和 ScrollView 实现了拖放列表。即使我触摸该项目,我也希望能够滚动列表。问题是当我做滚动手势时项目会移动。当然,我也希望能够移动该项目,但现在它具有与滚动相同的手势。我想通过仅在长按(1.5 秒)后才启用拖动元素来克服它。如何实施?我想像这里描述的那样使用 Touchable 作为 onPressIn / onPressOut 的元素:http : //browniefed.com/blog/react-native-press-and-hold-button-actions/ 并以某种方式在一段时间后启用 panResponder ,但我不知道如何以编程方式启用它。
现在这是我的列表中元素的代码:
class AccountItem extends Component {
constructor(props) {
super(props);
this.state = {
pan: new Animated.ValueXY(),
zIndex: 0,
}
this.panResponder = PanResponder.create({
onStartShouldSetPanResponder: () => true,
onPanResponderGrant: (e, gestureState) => {
this.setState({ zIndex: 100 });
this.props.disableScroll();
},
onPanResponderMove: Animated.event([null, {
dx: this.state.pan.x,
dy: this.state.pan.y,
}]),
onPanResponderRelease: (e, gesture) => {
this.props.submitNewPositions();
Animated.spring(
this.state.pan,
{toValue:{ x:0, y:0 }}
).start();
this.setState({ zIndex: 0 });
this.props.enableScroll();
}
})
}
meassureMyComponent = (event) => {
const { setElementPosition } = this.props;
let posY = event.nativeEvent.layout.y;
setElementPosition(posY);
}
render() {
const {name, index, onChangeText, onRemoveAccount} = this.props;
return (
<Animated.View
style={[this.state.pan.getLayout(), styles.container, {zIndex: this.state.zIndex}]}
{...this.panResponder.panHandlers}
onLayout={this.meassureMyComponent}
>
some other components...
</Animated.View>
)
}
}
export default AccountItem;