如何在Android上的React Native中检测同时触摸



我正在开发一个应用程序,它需要处理同时触摸(通常最多2或3次(。以便用户可以同时按下多个按钮。问题是,在Android上,当用户按下其中一个按钮(不需要RN的<Button>(时,只要按住第一个按钮,他们就无法按下其他按钮。首先,我尝试了RN的<Pressable>,以接收PressIn和PressOut事件,方式如下:


const Key = ({label, ...}): Node => {
const [hold, setHold] = useState(false);
return (
<Pressable
onPressIn={...}
onPressOut={...}
style={hold ? styles.keyHold : styles.keyUnhold}
>
<Text>{label}</Text>
</Pressable>
);
};

const Keyboard = ({...}): Node => {
//...
return (
<FlatList
data={data}
renderItem={({item}) => {
const {label, name} = item;
return <Key title={label} ... />;
}}
/>
);
};

它也有上述问题。之后,我在StackOverflow上找到了很多答案(React Native-onTouchStart vs PanResponder每秒多次触摸如何在React Native中同时启用多个按钮的触摸?如何在reace Native中检测同时发生的onPress事件?(,我试着用onTouchStart/onTouchEnd<View>代替<Pressable>onPressIn/onPressOut。问题仍然存在,只是当按住一个按钮(使用<View>构建(并试图按下另一个按钮时,第一个按钮会被释放,屏幕上的任何触摸都会触发第一个按钮(仍处于物理按住状态(。

发布的问题上的许多答案和评论都建议使用PanResponder,但通过回避,我找不到任何使用PanResponder实现我想要的东西的例子。

所以问题是:如何在注册护士中实现这一点?我应该使用PanResponder吗?如果是的话,一个关于如何做到这一点的例子对我真的很有帮助。或者也许还有其他我不知道的方法可以实现这一点?

(我在运行7.1的真正Android设备上使用RN 0.66(

这与元素Pressable或Touchable不起作用,相反,您可以将元素View与事件onTouchStart和onTouchEnd 一起使用

<View>
<View onTouchStart={onPressInFirst} onTouchEnd={onPressOutFirst}>
<Text>BUTTON 1</Text>
</View>
<View onTouchStart={onPressInSecond} onTouchEnd={onPressOutSecond}>
<Text>BUTTON 2</Text>
</View>
</View>

最新更新