Obsługa pośrednich danych wejściowych wskaźnika w Jetpack Compose Glimmer

Obsługiwane urządzenia z XR
Te wskazówki pomogą Ci tworzyć aplikacje na te typy urządzeń z XR.
Okulary audio i
wyświetlające obraz

Modyfikator onIndirectPointerGesture umożliwia komponentowi odbieranie i reagowanie na zdarzenia wskaźnika pośredniego wysokiego poziomu, takie jak te pochodzące z touchpada urządzenia. Użyj tego modyfikatora, aby przechwytywać i przetwarzać gesty pochodzące z touchpada lub podobnego źródła.

Powierzchnia API

Aplikacja może używać 4 wywołań zwrotnych do kontrolowania obsługi:

  • onClick: wywoływane po udanym dotknięciu lub kliknięciu bez znaczącego ruchu poziomego.
  • onSwipeForward: wywoływane, gdy przesunięcie poziome przekroczy próg odległości i prędkości w kierunku do przodu.
  • onSwipeBackward: wywoływane, gdy przesunięcie poziome przekroczy próg odległości i prędkości w kierunku do tyłu.
  • Enabled: gdy ustawiona jest wartość false, modyfikator jest ignorowany i nie są wywoływane żadne wywołania zwrotne.

Działanie systemu w przypadku przesuwania i przewijania

System używa progu tolerancji dotyku, aby odróżnić kliknięcie od przesunięcia.

  • Jeśli wskaźnik znacząco się poruszy podczas stanu naciśnięcia, onClick zostanie anulowane.
  • Jeśli wskaźnik znacząco się cofnie podczas ruchu, gest przesunięcia zostanie unieważniony.

Przykład: konfigurowanie obsługi przesuwania i klikania komponentu

Poniższy kod konfiguruje obsługę przesuwania i klikania elementu Box, na którym można się skupić:

@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")
    }
}

Najważniejsze informacje o kodzie

  • onIndirectPointerGesture wymaga skupienia, dlatego stosowany jest też focusTarget, aby umożliwić skupienie się na elemencie Box. Możesz użyć focusTarget lub innego modyfikatora umożliwiającego skupienie, np. surface. Bez skupienia modyfikator nie może reagować na zdarzenia wskaźnika pośredniego.
  • Ten przykład implementuje wywołania zwrotne onSwipeForward i onClick, więc wykryte gesty przesuwania i klikania są przechwytywane i wykorzystywane, a nie docierają do kontenerów nadrzędnych. Możesz jednak pozostawić określone wywołanie zwrotne jako null, aby przekazać gest do modyfikatora onIndirectPointerGesture w kontenerze nadrzędnym.