react native开发Android篇——绑定触摸系统PanResponder组件中的Touch...组件onPress无法触发
·
react native开发Android篇——绑定触摸系统PanResponder组件中的Touch...组件onPress无法触发
PanResponder类可以将多点触摸操作协调成一个手势。它使得一个单点触摸可以接受更多的触摸操作,也可以用于识别简单的多点触摸手势。
响应者的生命周期和文档啥的,api网站上写的很详细,我就不再啰嗦了,我在这里只说明PanResponder中的onPress事件如何触发,在onMoveShouldSetPanResponder中根据触摸的面积大小去判断是触发移动事件还是onPress事件即可,代码如下所示。
componentWillMount: function() {
this._panResponder = PanResponder.create({
//在用户开始触摸的时候(手指刚刚接触屏幕的瞬间),是否愿意成为响应者?
onStartShouldSetPanResponder: (evt, gestureState) => true,
onStartShouldSetPanResponderCapture: (evt, gestureState) => true,
onMoveShouldSetPanResponder: (evt, gestureState) => {
//解决PanResponder中的onPress无作用
//当大于5时才进入移动事件,有的情况下需要将onStartShouldSetPanResponderCapture设为false
if (Math.abs(gestureState.dx) > 5 || Math.abs(gestureState.dy) > 5) {
return true;
} else if (Math.abs(gestureState.dx) == 0 || Math.abs(gestureState.dy) == 0) {
return false;
}
},
onMoveShouldSetPanResponderCapture: (evt, gestureState) => true,
onPanResponderGrant: (evt, gestureState) => {
// 开始手势操作。给用户一些视觉反馈,让他们知道发生了什么事情!
// gestureState.{x,y} 现在会被设置为0
},
onPanResponderMove: (evt, gestureState) => {
// 最近一次的移动距离为gestureState.move{X,Y}
// 从成为响应者开始时的累计手势移动距离为gestureState.d{x,y}
},
onPanResponderTerminationRequest: (evt, gestureState) => true,
onPanResponderRelease: (evt, gestureState) => {
// 用户放开了所有的触摸点,且此时视图已经成为了响应者。
// 一般来说这意味着一个手势操作已经成功完成。
},
onPanResponderTerminate: (evt, gestureState) => {
// 另一个组件已经成为了新的响应者,所以当前手势将被取消。
},
onShouldBlockNativeResponder: (evt, gestureState) => {
// 返回一个布尔值,决定当前组件是否应该阻止原生组件成为JS响应者
// 默认返回true。目前暂时只支持android。
return true;
},
});
},
render: function() {
return (
<View {...this._panResponder.panHandlers} />
);
},
更多推荐



所有评论(0)