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 nafalse, 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,
onClickzostanie 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
onIndirectPointerGesturewymaga skupienia, więcfocusTargetjest również stosowany, aby elementBoxbył fokusowalny. Możesz użyćfocusTargetlub 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
onSwipeForwardionClick, 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 modyfikatoraonIndirectPointerGesturew kontenerze nadrzędnym. -