Mit dem Modifikator onIndirectPointerGesture kann eine Komponente indirekte Zeigerereignisse auf hoher Ebene empfangen und darauf reagieren, z. B. solche, die vom Touchpad eines Geräts stammen. Mit diesem Modifikator können Sie Touchpad-Gesten oder ähnliche Quellen erfassen und 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 Schwellenwert für Distanz und Geschwindigkeit in Vorwärtsrichtung überschreitet.onSwipeBackward: Wird ausgelöst, wenn ein horizontaler Wischvorgang den Schwellenwert für Distanz und Geschwindigkeit in Rückwärtsrichtung ü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-Toleranzwert, 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 deutlich zurückweicht, wird die Wischbewegung ungültig.
Beispiel: Verarbeitung von Wisch- und Klickvorgängen für eine Komponente einrichten
Mit dem folgenden Code wird die Verarbeitung von Wischbewegungen und Klicks auf ein fokussierbares Box eingerichtet:
@Composable @Sampled fun OnIndirectPointerGestureSample() { Box( modifier = Modifier.fillMaxSize() .onIndirectPointerGesture( enabled = true, onSwipeForward = { /* onSwipeForward */ }, onSwipeBackward = { /* onSwipeBackward */ }, onClick = { /* onClick */ }, ) .focusTarget() ) { // App() } }
Wichtige Punkte zum Code
onIndirectPointerGestureerfordert den Fokus. Daher wird auchfocusTargetangewendet, damitBoxfokussierbar ist. Sie könnenfocusTargetoder einen anderen Fokus-Aktivierungsmodifikator wiesurfaceverwenden. Ohne Fokus kann der Modifier nicht auf indirekte Zeigerereignisse reagieren.- In diesem Beispiel werden sowohl die
onSwipeForward- als auch dieonClick-Callbacks implementiert. Erkannte Wisch- und Klickgesten werden also abgefangen und verarbeitet und erreichen keine übergeordneten Container. Sie können aber auch einen bestimmten Callback auf „null“ setzen, um eine Geste an einenonIndirectPointerGesture-Modifikator in einem übergeordneten Container zu übergeben. -