为什么当我的PanResponder被触摸时被“选中”(右)

时间:2019-07-05 20:17:05

标签: javascript react-native

我想使用PanResponder获得可拖动的图像,它可以工作,但是当我触摸右侧(图像高度的矩形,从图像的右边缘到屏幕的右边缘)时,它也会不必要地起作用。这是一个问题,因为我想拥有多个可拖动组件。 图像从他的位置开始移动,相对于手指移动。

我尝试使用仿真器(Pixel_3_XL_API_29,最新的Android版本), 和平板电脑(V90_HD,Android 5.1.1)相同。

另外,这是一个国际象棋游戏,我本机反应新奇,是具有可拖动PanResponder部件组件的正确方法,还是可以/更好地拥有一个功能或一个不可见的PanResponder来移动所有部件? (无论如何,第一个问题仍然是,我想问题还是一样的)

以下是组件:

class DragTest extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      pan: new Animated.ValueXY()
    };
  }

  componentWillMount() {
    this._panResponder = PanResponder.create({
      onMoveShouldSetResponderCapture: () => true,
      onMoveShouldSetPanResponderCapture: () => true,

      onPanResponderGrant: (e, gestureState) => {
        this.state.pan.setOffset({x: this.state.pan.x._value, y: this.state.pan.y._value});
        this.state.pan.setValue({x: 0, y: 0});
      },

      onPanResponderMove: Animated.event([
        null, {dx: this.state.pan.x, dy: this.state.pan.y},
      ]),

      onPanResponderRelease: (e, {vx, vy}) => {
        this.state.pan.flattenOffset();
      }
    });
  }
  render() {
    let { pan } = this.state;

    let [translateX, translateY] = [pan.x, pan.y];

    let imageStyle = {transform: [{translateX}, {translateY}]};
    return (
       <Animated.View style={imageStyle} {...this._panResponder.panHandlers}>
         <Image source={require('./Image.png')} />
       </Animated.View>
    );
  }
}

1 个答案:

答案 0 :(得分:0)

我终于找到了

style={[imageStyle, {position: 'absolute'}]}