Mit dem Modifikator onIndirectPointerGesture kann die Komponente indirekte Zeigerereignisse auf hoher Ebene empfangen und darauf reagieren, z. B. solche, die vom Touchpad eines Geräts stammen. Verwenden Sie diesen Modifikator, um Touchpad-Gesten oder ähnliche Gesten zu erfassen und zu verarbeiten.
API-Oberfläche
Es gibt vier Callbacks, mit denen Ihre App die Verarbeitung steuern kann:
onClick: Wird bei einem erfolgreichen Tippen oder Klicken ohne nennenswerte horizontale Bewegung ausgelöst.onSwipeForward: Wird ausgelöst, wenn ein horizontales Wischen den Entfernungs- und Geschwindigkeitsschwellenwert in Vorwärtsrichtung überschreitet.onSwipeBackward: Wird ausgelöst, wenn ein horizontales Wischen den Entfernungs- und Geschwindigkeitsschwellenwert in rückwärtiger Richtung überschreitet.Enabled: Wenn dieser Wert auffalsegesetzt ist, wird der Modifikator ignoriert und es werden keine Callbacks aufgerufen.
Systemverhalten beim Wischen und Scrollen
Das System verwendet einen Touch-Slop-Schwellenwert, um zwischen einem Klick und einer Wischgeste zu unterscheiden.
- Wenn sich der Zeiger während eines Down-Zustands erheblich bewegt, wird
onClickabgebrochen. - Wenn der Zeiger während einer Bewegung deutlich zurückgeht, wird die Wischgeste ungültig.
Beispiel: Verarbeitung von Wischbewegungen und Klicks auf eine Komponente einrichten
Mit dem folgenden Code wird die Verarbeitung von Wisch- und Klickgesten für ein fokussierbares Box eingerichtet:
@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") } }
Wichtige Punkte zum Code
onIndirectPointerGestureerfordert Fokus, daher wird auch dasfocusTargetangewendet, umBoxfokussierbar zu machen. Sie könnenfocusTargetoder einen anderen Modifikator verwenden, der den Fokus ermöglicht, z. B.surface. Ohne Fokus kann der Modifikator nicht auf indirekte Zeigerereignisse reagieren.- In diesem Beispiel werden sowohl die
onSwipeForward- als auch dieonClick-Callbacks implementiert, sodass erkannte Wisch- und Klickgesten abgefangen und verarbeitet werden und nicht an übergeordnete Container weitergeleitet werden. Sie können einen bestimmten Callback aber auch auf „null“ setzen, um eine Geste an einenonIndirectPointerGesture-Modifikator in einem übergeordneten Container weiterzugeben.