我们需要能够在 Jetpack Compose 中长按同一组件后检测到轻击和拖动手势。
要检测水龙头,我们可以这样做:
Modifier.pointerInput(graphData) { detectTapGestures( ... ) }
并在长按后检测拖动手势:
Modifier.pointerInput(graphData) { detectDragGesturesAfterLongPress( ... ) }
但不可能同时使用两者,因为第一个detect*会消耗指针事件:
detect*
Modifier.pointerInput(graphData) { detectTapGestures( ... ) detectDragGesturesAfterLongPress( ... ) }
是否有可能以更方便的方式实现这一点,然后滚动我们自己的自定义函数来复制detectDragGesturesAfterLongPress 中的大部分代码?
通过链接两个 Modifier.pointerInput(Unit) 函数,您将能够检测到这两种手势。当然,如果拖动手势已经开始,您将无法检测到点击
val context = LocalContext.current val modifier = Modifier .pointerInput(Unit) { detectTapGestures( onPress = { Toast .makeText(context, "onPress", Toast.LENGTH_SHORT) .show() }, onTap = { Toast .makeText(context, "onTap", Toast.LENGTH_SHORT) .show() } ) } .pointerInput(Unit) { detectDragGesturesAfterLongPress( onDragStart = { Toast .makeText(context, "onDragStart", Toast.LENGTH_SHORT) .show() }, onDrag = { change, dragAmount -> println("DRAGGING$ dragAmount") } ) }