Modyfikator onIndirectPointerGesture umożliwia komponentowi odbieranie zdarzeń wskaźnika pośredniego wysokiego poziomu, takich jak te pochodzące z touchpada urządzenia, i reagowanie na nie. Użyj tego modyfikatora, aby przechwytywać i przetwarzać gesty pochodzące z touchpada lub podobnego źródła.
Interfejs API
Aplikacja może używać 4 wywołań zwrotnych do kontrolowania obsługi:
onClick: wywoływane po kliknięciu bez znaczącego ruchu w poziomie.onSwipeForward: aktywowane, gdy przesunięcie poziome przekroczy próg odległości i prędkości w kierunku do przodu.onSwipeBackward: aktywowane, gdy przesunięcie poziome przekroczy próg odległości i prędkości w kierunku wstecz.Enabled: gdy ma wartośćfalse, modyfikator jest ignorowany i nie są wywoływane żadne wywołania zwrotne.
Działanie systemu podczas przesuwania i przewijania
System używa progu przesunięcia dotykowego, aby odróżnić kliknięcie od przesunięcia palcem.
- Jeśli wskaźnik znacznie się przesunie, gdy jest wciśnięty, zdarzenie
onClickzostanie anulowane. - Jeśli podczas ruchu wskaźnik znacznie się cofnie, gest przesunięcia zostanie unieważniony.
Przykład: konfigurowanie obsługi przesunięć i kliknięć komponentu
Poniższy kod konfiguruje obsługę przesunięć i kliknięć na elemencie Box, który można zaznaczyć:
@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
onIndirectPointerGesturewymaga zaznaczenia, więc stosowany jest też atrybutfocusTarget, aby umożliwić zaznaczenie elementuBox. Możesz użyćfocusTargetlub innego modyfikatora, który umożliwia ustawienie fokusu, np.surface. Bez zaznaczenia modyfikator nie może reagować na zdarzenia pośredniego wskaźnika.- W tym przykładzie zaimplementowano wywołania zwrotne
onSwipeForwardionClick, dzięki czemu wykryte gesty przesunięcia i kliknięcia są przechwytywane i wykorzystywane, a nie przekazywane do kontenerów nadrzędnych. Możesz też pozostawić konkretne wywołanie zwrotne jako null, aby przekazać gest do modyfikatoraonIndirectPointerGesturew kontenerze nadrzędnym.