我有一个项目列表,我可以长按选择任何列表项目并将其拖到图标上进行删除。我为此使用 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)
}
}
})