React Native:在 Android 上损坏的滚动视图内使用 panResponder

Zen*_*ith 6 android react-native

我知道这个问题已被多次提出,但我还没有在任何其他线程上找到有效的修复程序(其中大多数线程几乎没有回复)。

在我的实现中,我有一个 ScrollView,它是一个项目列表的父项,每个项目都有一个用于横向滑动的 panResponder (如 Tinder 卡)。

我遇到的问题是 ScrollView 停止 panResponder 动画并优先考虑滚动。

我尝试过动态切换scrollEnabled滚动视图onPanResponderGrantonPanResponderRelease但这不是一个可行的解决方案,因为在 panResponder 上垂直滚动会onPanResponderGrant触发禁用滚动。

这是我的实现panResponder

this._panResponder = PanResponder.create({
        onStartShouldSetPanResponder: (evt, gestureState) => true,
        onStartShouldSetPanResponderCapture: (evt, gestureState) => true,
        onMoveShouldSetPanResponder: (evt, gestureState) => false,
        onMoveShouldSetPanResponderCapture: (evt, gestureState) => false,
        onShouldBlockNativeResponder: (evt, gestureState) => false,
        onPanResponderTerminationRequest: () => false,
        onPanResponderGrant: (event, gestureState) => {
          this.pan.setValue(0);
          this.opacity.setValue(0)
          this.rotation.setValue(0)
        },
        onPanResponderMove: (event, gesture) => {
            this.pan.setValue(gesture.dx)
            this.rotation.setValue(gesture.dx)
            this.opacity.setValue(gesture.dx)
          },  
        onPanResponderRelease: (event, gestureState) => {
            if(gestureState.dx < -SWIPE_THRESHOLD){
                this.removeCard()
              } else {
                this.resetPosition()
              }
        }
      });
Run Code Online (Sandbox Code Playgroud)

这是呈现每个可刷卡的 FlatList:

 <FlatList
            data={this.state.cards}
            keyExtractor={item => item.id}
            renderItem={({ item }) => (
              <DataCard
              type={item.type}
              name={item.name}
              />
            )}
          />
Run Code Online (Sandbox Code Playgroud)

从那以后,我换了ScrollView一个FlatList,希望能神奇地解决这个问题,但没有运气。

此功能在 iOS 上完美运行,但问题仍然存在于 Android 上。

这似乎是一个很常见的问题,没有具体的解决方案。这就是我发布此内容所希望的。

谢谢!

Rea*_*eal 0

onShouldBlockNativeResponder: () => false尝试在PanResponder.create配置对象中使用