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

Odpowiednie urządzenia XR
Te wskazówki pomogą Ci tworzyć rozwiązania na te typy urządzeń XR.
Okulary audio i
wyświetlacz

Modyfikator onIndirectPointerGesture umożliwia komponentowi odbieranie i obsługiwanie pośrednich zdarzeń wskaźnika wysokiego poziomu, takich jak zdarzenia pochodzące z touchpada urządzenia. Użyj tego modyfikatora, aby rejestrować i przetwarzać gesty pochodzące z touchpada lub podobnego źródła.

Powierzchnia interfejsu API

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

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

Zachowanie systemu podczas przesuwania i przewijania

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

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

Przykład: konfigurowanie obsługi przesunięć i kliknięć w komponencie

Poniższy kod konfiguruje obsługę przesunięć i kliknięć na elemencie Box, który można zaznaczyć:

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

Najważniejsze informacje o kodzie

  • onIndirectPointerGesture wymaga skupienia, więc focusTarget jest również stosowany, aby element Box był fokusowalny. Możesz użyć focusTarget lub innego modyfikatora umożliwiającego ustawienie ostrości, np. surface. Bez fokusu modyfikator nie może reagować na pośrednie zdarzenia wskaźnika.
  • W tym przykładzie zaimplementowano wywołania zwrotne onSwipeForwardonClick, więc wykryte gesty przesuwania i kliknięcia są przechwytywane i wykorzystywane, a nie docierają do kontenerów nadrzędnych. Możesz jednak pozostawić konkretne wywołanie zwrotne jako null, aby przekazać gest do modyfikatora onIndirectPointerGesture w kontenerze nadrzędnym. -