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