Der onIndirectPointerGesture Modifikator lässt die Komponente indirekte Zeigerereignisse auf hoher Ebene empfangen und darauf reagieren,
z. B. Ereignisse, die vom
Touchpad eines Geräts stammen. Mit diesem Modifikator können Sie Gesten erfassen und verarbeiten, die von einem Touchpad oder einer ähnlichen Quelle stammen.
API-Oberfläche
Es gibt vier Callbacks, mit denen Ihre App die Verarbeitung steuern kann:
onClick: Wird bei einem erfolgreichen Tippen oder Klicken ohne erhebliche horizontale Bewegung ausgelöst.onSwipeForward: Wird ausgelöst, wenn ein horizontaler Wisch den Schwellenwert für Entfernung und Geschwindigkeit in Vorwärtsrichtung überschreitet.onSwipeBackward: Wird ausgelöst, wenn ein horizontaler Wisch den Schwellenwert für Entfernung und Geschwindigkeit in Rückwärtsrichtung überschreitet.Enabled: Wenn auffalsegesetzt, wird der Modifikator ignoriert und es werden keine Callbacks aufgerufen.
Systemverhalten beim Wischen und Scrollen
Das System verwendet einen Schwellenwert für die Touch-Verzögerung, um zwischen einem Klick und einem Wischen zu unterscheiden.
- Wenn sich der Zeiger während eines „Down“-Zustands erheblich bewegt, wird
onClickabgebrochen. - Wenn der Zeiger während einer Bewegung erheblich zurückkehrt, wird die Wischbewegung ungültig.
Beispiel: Verarbeitung für Wischbewegungen und Klicks auf einer Komponente einrichten
Mit dem folgenden Code wird die Verarbeitung für Wischbewegungen und Klicks auf einem fokussierbaren Box-Element 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 den Fokus. Daher wird auchfocusTargetangewendet, um dasBoxfokussierbar zu machen. Sie könnenfocusTargetoder einen anderen Modifikator verwenden, der den Fokus aktiviert, z. B.surface. Ohne Fokus kann der Modifikator nicht auf indirekte Zeigerereignisse reagieren.- In diesem Beispiel werden sowohl die Callbacks
onSwipeForwardals auchonClickimplementiert. Daher werden erkannte Wisch- und Klickbewegungen abgefangen und verarbeitet und erreichen keine übergeordneten Container. Sie können jedoch auch ein bestimmtes Callback auf Null lassen, um eine Touchgeste an einenonIndirectPointerGesture-Modifikator in einem übergeordneten Container zu übergeben.