Gestire gli input del puntatore indiretto in Jetpack Compose Glimmer

Dispositivi XR applicabili
Queste indicazioni ti aiutano a creare esperienze per questi tipi di dispositivi XR.
Occhiali audio e
display

Il modificatore onIndirectPointerGesture consente al componente di ricevere e rispondere agli eventi di puntatore indiretto di alto livello, ad esempio 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 su un tocco o un 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à all'indietro.
  • Enabled: se impostato su false, il modificatore viene ignorato e non vengono richiamati callback.

Comportamento del sistema per lo scorrimento e lo scorrimento

Il sistema utilizza una soglia di slop di tocco per distinguere tra un clic e uno scorrimento.

  • Se il puntatore si sposta in modo significativo durante uno stato di inattività, onClick viene annullato.
  • Se il puntatore torna indietro in modo significativo durante un movimento, il gesto di scorrimento viene invalidato.

Esempio: configurare la gestione di scorrimenti e clic su un componente

Il codice seguente configura la gestione di scorrimenti e clic su un Box focalizzabile:

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

Punti chiave sul codice

  • onIndirectPointerGesture richiede il focus, quindi viene applicato anche focusTarget per rendere focalizzabile il Box. Puoi utilizzare focusTarget o un altro modificatore che abilita il focus, ad esempio surface. Senza il focus, il modificatore non può agire sugli eventi di puntatore indiretto.
  • Questo esempio implementa i callback onSwipeForward e onClick, quindi i gesti di scorrimento e clic rilevati vengono intercettati e utilizzati e non raggiungono i container principali. Tuttavia, puoi anche lasciare un callback specifico come null per passare un gesto a un modificatore onIndirectPointerGesture in un container principale. -