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 enfalse, 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
onIndirectPointerGesturerequiere enfoque, por lo que también se aplicafocusTargetpara que elBoxsea enfocable. Puedes usarfocusTargeto algún otro modificador que habilite el enfoque, comosurface. Sin enfoque, el modificador no puede actuar sobre eventos de puntero indirectos.- En este ejemplo, se implementan las devoluciones de llamadas
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 una devolución de llamada específica como nula para pasar un gesto a un modificadoronIndirectPointerGestureen un contenedor superior. -