Il modificatore onIndirectPointerGesture consente al componente di ricevere e rispondere a eventi di puntatore indiretto di alto livello, come quelli provenienti dal touchpad di un dispositivo. Utilizza questo modificatore per acquisire ed elaborare i gesti provenienti da un touchpad o da una fonte simile.
Piattaforma API
Esistono quattro callback che la tua app può utilizzare per controllare la gestione:
onClick: attivato in caso di tocco o clic riuscito senza un movimento orizzontale significativo.onSwipeForward: attivato quando uno scorrimento orizzontale supera la soglia di distanza e velocità in avanti.onSwipeBackward: attivato quando uno scorrimento orizzontale supera la soglia di distanza e velocità nella direzione inversa.Enabled: se impostato sufalse, il modificatore viene ignorato e non vengono richiamati callback.
Comportamento del sistema per lo scorrimento
Il sistema utilizza una soglia di tolleranza al tocco per distinguere tra un clic e uno scorrimento.
- Se il puntatore si sposta in modo significativo durante uno stato di pressione,
onClickviene annullato. - Se il puntatore torna indietro in modo significativo durante un movimento, il gesto di scorrimento viene invalidato.
Esempio: configura la gestione di scorrimenti e clic su un componente
Il seguente codice configura la gestione degli scorrimenti e dei clic su un Box attivabile:
@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") } }
Punti chiave sul codice
onIndirectPointerGesturerichiede lo stato attivo, quindi viene applicato anchefocusTargetper rendere attivabileBox. Puoi utilizzarefocusTargeto un altro modificatore che attiva lo stato attivo, ad esempiosurface. Senza lo stato attivo, il modificatore non può agire sugli eventi del puntatore indiretto.- Questo esempio implementa i callback
onSwipeForwardeonClick, quindi i gesti di scorrimento e clic rilevati vengono intercettati e consumati e non raggiungono i contenitori principali. Tuttavia, puoi anche lasciare un callback specifico null per passare un gesto a un modificatoreonIndirectPointerGesturein un container principale.