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,
onClickzostanie 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
onIndirectPointerGesturewymaga skupienia, dlatego stosowany jest teżfocusTarget, aby umożliwić skupienie się na elemencieBox. Możesz użyćfocusTargetlub 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
onSwipeForwardionClick, 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 modyfikatoraonIndirectPointerGesturew kontenerze nadrzędnym.