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 llamada que tu app puede usar para controlar el procesamiento:
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 enfalse, se ignora el modificador y no se invocan devoluciones de llamada.
Comportamiento del sistema para deslizar el dedo y desplazarse
El sistema usa un umbral de margen de toque para diferenciar entre un clic y un deslizamiento.
- Si el puntero se mueve significativamente durante un estado de presión, se cancela
onClick. - Si el puntero retrocede de forma significativa durante un movimiento, se invalida el gesto de deslizamiento.
Ejemplo: Configura el control de deslizamientos y clics en un componente
El siguiente código configura el control de deslizamientos y clics en un Box enfocable:
@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") } }
Puntos clave sobre el código
onIndirectPointerGesturerequiere enfoque, por lo que también se aplicafocusTargetpara que se pueda enfocarBox. Puedes usarfocusTargeto algún otro modificador que habilite el enfoque, comosurface. Sin el enfoque, el modificador no puede actuar sobre eventos de puntero indirectos.- En este ejemplo, se implementan las devoluciones de llamada
onSwipeForwardyonClick, 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 un callback específico como nulo para pasar un gesto a un modificadoronIndirectPointerGestureen un contenedor superior.