Gérer les entrées de pointeur indirectes dans Jetpack Compose Glimmer

Appareils XR concernés
Ces conseils vous aident à créer des expériences pour ces types d'appareils XR.
Lunettes audio et
d'affichage

Le modificateur onIndirectPointerGesture permet au composant de recevoir et de répondre aux événements de pointeur indirect de haut niveau, tels que ceux provenant du pavé tactile d'un appareil. Utilisez ce modificateur pour capturer et traiter les gestes provenant d'un pavé tactile ou d'une source similaire.

Surface d'API

Votre application peut utiliser quatre rappels pour contrôler la gestion :

  • onClick: déclenché lors d'un appui ou d'un clic réussi sans mouvement horizontal significatif.
  • onSwipeForward: déclenché lorsqu'un balayage horizontal dépasse le seuil de distance et de vitesse dans le sens avant.
  • onSwipeBackward: déclenché lorsqu'un balayage horizontal dépasse le seuil de distance et de vitesse dans le sens arrière.
  • Enabled: lorsque la valeur est définie sur false, le modificateur est ignoré et aucun rappel n'est appelé.

Comportement du système pour les balayages et le défilement

Le système utilise un seuil de tolérance au toucher pour faire la différence entre un clic et un balayage.

  • Si le pointeur se déplace de manière significative pendant un état d'inactivité, onClick est annulé.
  • Si le pointeur revient en arrière de manière significative pendant un mouvement, le geste de balayage n'est pas validé.

Exemple : Configurer la gestion des balayages et des clics sur un composant

Le code suivant configure la gestion des balayages et des clics sur un Box pouvant être ciblé :

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

Points essentiels concernant le code

  • onIndirectPointerGesture nécessite un focus. Par conséquent, focusTarget est également appliqué pour rendre le Box ciblable. Vous pouvez utiliser focusTarget ou un autre modificateur permettant le focus, tel que surface. Sans focus, le modificateur ne peut pas agir sur les événements de pointeur indirect.
  • Cet exemple implémente les rappels onSwipeForward et onClick. Par conséquent, les gestes de balayage et de clic détectés sont interceptés et utilisés, et n'atteignent pas les conteneurs parents. Toutefois, vous pouvez également laisser un rappel spécifique nul pour transmettre un geste à un modificateur onIndirectPointerGesture dans un conteneur parent. -