onIndirectPointerGesture 修饰符可让组件接收并响应
高级间接指针事件,例如源自设备
触控板的事件。使用此修饰符可捕获和处理来自触控板或类似来源的手势。
API Surface
您的应用可以使用以下四个回调来控制处理:
onClick:在成功轻触或点击且没有明显的水平移动时触发。onSwipeForward:在水平滑动超过向前方向的距离和速度阈值时触发。onSwipeBackward:在水平滑动超过向后方向的距离和速度阈值时触发。Enabled:设置为false时,系统会忽略该修饰符,并且不会调用任何回调。
滑动和滚动时的系统行为
系统使用触控容错阈值来区分点击和滑动。
- 如果在按下状态期间指针发生明显移动,则系统会取消
onClick。 - 如果在移动期间指针发生明显回溯,则滑动操作无效。
示例:为组件上的滑动和点击设置处理
以下代码为可聚焦的 Box 设置了滑动和点击处理:
@Composable fun OnIndirectPointerGestureSample() { var lastGesture by remember { mutableStateOf("None") } Box( modifier = Modifier.fillMaxSize() .onIndirectPointerGesture( enabled = true, onSwipeForward = { lastGesture = "Forward" }, onSwipeBackward = { lastGesture = "Backward" }, onClick = { lastGesture = "Click" }, ) .focusTarget(), contentAlignment = Alignment.Center, ) { Text("Last Gesture: $lastGesture") } }
代码要点
onIndirectPointerGesture需要焦点,因此还应用了focusTarget,以使Box可聚焦。您可以使用focusTarget或其他 启用焦点的修饰符,例如surface。如果没有焦点,修饰符将无法对间接指针事件执行操作。- 此示例同时实现了
onSwipeForward和onClick回调,因此检测到的滑动和点击手势会被拦截和使用,并且不会向父容器传递。不过,您也可以将特定回调留空,以将手势传递给父容器中的onIndirectPointerGesture修饰符。