0

我有一个项目列表,我可以长按选择任何列表项目并将其拖到图标上进行删除。我为此使用 PanResponder。现在在这部分中,长按触发功能的第一个关键步骤在某些设备中没有发生,而在某些设备中它正在工作。我认为问题是通过 {...panResponder.panHandlers} 时,touchbales 在动画视图中似乎无法正常工作

  <Animated.View
      style={
        item.uuid === val &&
        (item.type === 'MESSAGE' || item.type === 'ATTACHMENT') &&
        (userDetails.uuid === item.actionedByUuid) &&
        !openChatBox &&
        moment(new Date(item.createdAt), 'ddd MMM DD YYYY HH:mm:ss GMT Z').diff(Date.now(), 'minutes') <= 0 &&
        moment(new Date(item.createdAt), 'ddd MMM DD YYYY HH:mm:ss GMT Z').diff(Date.now(), 'minutes') >= -15
          ? {
              transform: [{ translateX: pan.x }, { translateY: pan.y }],
              // transform:[{scale:scale}],
              flex: 1,
              zIndex: 1000
            }
          : { flex: 1 }
      }
      {...panResponder.panHandlers}
    >
        <TouchableWithoutFeedback
        onLongPress={() => {
          (item.type === 'MESSAGE' || item.type === 'ATTACHMENT') && indexer(item)
        }}
      > 
        {element}
        <SizedBox height={24} />
    </TouchableWithoutFeedback>
    </Animated.View>

这个特定的代码映射到一个数据数组,val 是我使用过的状态,并且正在索引器函数中设置,其中 val 包含项目索引号,这有助于选择单个列表项以进行进一步的拖放。

现在我面临的问题是这个没有反馈的Touchable在一些Android设备中触发了索引器功能,而在一些设备中它根本不这样做。

当 {...panResponder.panHandler} 从 animated.view 中删除时,没有反馈的 Touchable 开始工作。下面是我的平底锅处理程序:

const panResponder = PanResponder.create({
onMoveShouldSetPanResponder: () => true,

onPanResponderGrant: () => {
  pan.setOffset({
    x: pan.x._value,
    y: pan.y._value
  })

  pan.setValue({ x: 0, y: 0 })
  setProceed('unactive')
},
   onPanResponderMove: Animated.event([null, { dx: pan.x, dy: 
     pan.y }], { useNativeDriver: false }),
       onPanResponderRelease: (e, gesture) => {
      setGesture(gesture)

  if (isDropZone(gesture)) {
    setOpenConfirmation(true)
  } else if (proceed === 'unactive') {
    pan.flattenOffset()
    pan.setValue({ x: 0, y: 0 })

    Animated.spring(pan, {
      //This will make the draggable card back to its original position
      toValue: 0
    }).start(() => {
      console.log('Not dropped Animation spring back')
    }),
      setStatus(false)
    setVal(-1)
    setScrollHandler(true)
  }
}

})

4

0 回答 0