Cómo controlar las entradas de puntero indirectas en Jetpack Compose Glimmer

Dispositivos de realidad extendida correspondientes
Esta guía te ayuda a crear experiencias para estos tipos de dispositivos de realidad extendida.
Lentes de audio y
visualización

El modificador onIndirectPointerGesture permite que el componente reciba y responda a eventos de puntero indirectos de alto nivel, como los que se originan en el panel táctil de un dispositivo. Usa este modificador para capturar y procesar gestos que provienen de un panel táctil o una fuente similar.

Superficie de la API

Existen cuatro devoluciones de llamadas que tu app puede usar para controlar el control:

  • onClick: Se activa cuando se presiona o se hace clic correctamente sin un movimiento horizontal significativo.
  • onSwipeForward: Se activa cuando un deslizamiento horizontal supera el umbral de distancia y velocidad en la dirección hacia adelante.
  • onSwipeBackward: Se activa cuando un deslizamiento horizontal supera el umbral de distancia y velocidad en la dirección hacia atrás.
  • Enabled: Cuando se establece en false, se ignora el modificador y no se invoca ninguna devolución de llamada.

Comportamiento del sistema para deslizar y desplazarse

El sistema usa un umbral de inclinación táctil para diferenciar entre un clic y un deslizamiento.

  • Si el puntero se mueve de manera significativa durante un estado inactivo, se cancela onClick.
  • Si el puntero retrocede de manera significativa durante un movimiento, se invalida el gesto de deslizamiento.

Ejemplo: Configura el control para deslizar y hacer clic en un componente

El siguiente código configura el control para deslizar y hacer clic en un Box enfocable:

@Composable
@Sampled
fun OnIndirectPointerGestureSample() {
    Box(
        modifier =
            Modifier.fillMaxSize()
                .onIndirectPointerGesture(
                    enabled = true,
                    onSwipeForward = { /* onSwipeForward */ },
                    onSwipeBackward = { /* onSwipeBackward */ },
                    onClick = { /* onClick */ },
                )
                .focusTarget()
    ) {
        // App()
    }
}

Puntos clave sobre el código

  • onIndirectPointerGesture requiere enfoque, por lo que también se aplica focusTarget para que el Box sea enfocable. Puedes usar focusTarget o algún otro modificador que habilite el enfoque, como surface. Sin enfoque, el modificador no puede actuar sobre eventos de puntero indirectos.
  • En este ejemplo, se implementan las devoluciones de llamadas onSwipeForward y onClick, por lo que los gestos de deslizamiento y clic que se detectan se interceptan y consumen, y no llegan a los contenedores superiores. Sin embargo, también puedes dejar una devolución de llamada específica como nula para pasar un gesto a un modificador onIndirectPointerGesture en un contenedor superior. -