我正在开发一个应用程序,它需要处理同时触摸(通常最多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>