Indirekte Zeigereingaben in Jetpack Compose Glimmer verarbeiten

XR‑Geräte, für die der Leitfaden gilt
Dieser Leitfaden hilft Ihnen dabei, Erlebnisse für die folgenden Arten von XR-Geräten zu entwickeln.
Audio- &
Displaybrillen

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 auf false gesetzt 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 onClick abgebrochen.
  • 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

  • onIndirectPointerGesture erfordert den Fokus. Daher wird auch focusTarget angewendet, damit Box fokussierbar ist. Sie können focusTarget oder einen anderen Fokus-Aktivierungsmodifikator wie surface verwenden. Ohne Fokus kann der Modifier nicht auf indirekte Zeigerereignisse reagieren.
  • In diesem Beispiel werden sowohl die onSwipeForward- als auch die onClick-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 einen onIndirectPointerGesture-Modifikator in einem übergeordneten Container zu übergeben. -