在 Jetpack Compose Glimmer 中处理间接指针输入

适用的 XR 设备
本指南可帮助您为以下类型的 XR 设备打造优质体验。
音频和
显示眼镜

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。如果没有焦点,修饰符将无法对间接指针事件执行操作。
  • 此示例同时实现了 onSwipeForwardonClick 回调,因此检测到的滑动和点击手势会被拦截和使用,并且不会向父容器传递。不过,您也可以将特定回调留空,以将手势传递给父容器中的 onIndirectPointerGesture 修饰符。 -