Jetpack Compose Glimmer'da dolaylı işaretçi girişlerini işleme

Uygun XR cihazlar
Bu kılavuz, bu tür XR cihazları için deneyimler geliştirmenize yardımcı olur.
Görüntülü Gözlük

onIndirectPointerGesture değiştiricisi, bileşenin bir cihazın dokunmatik alanından kaynaklananlar gibi üst düzey dolaylı işaretçi etkinliklerini almasına ve bunlara yanıt vermesine olanak tanır. Dokunmatik alan veya benzer bir kaynaktan gelen hareketleri yakalayıp işlemek için bu değiştiriciyi kullanın.

API yüzeyi

Uygulamanızın, işleme sürecini kontrol etmek için kullanabileceği dört geri çağırma vardır:

  • onClick: Önemli bir yatay hareket olmadan başarılı bir dokunma veya tıklama işlemiyle tetiklenir.
  • onSwipeForward: Yatay kaydırma, ileri yönde mesafe ve hız eşiğini aştığında tetiklenir.
  • onSwipeBackward: Yatay kaydırma, geriye doğru mesafe ve hız eşiğini aştığında tetiklenir.
  • Enabled: false olarak ayarlandığında değiştirici yoksayılır ve geri çağırma işlevleri çağrılmaz.

Kaydırma ve kaydırarak geçme için sistem davranışı

Sistem, tıklama ile kaydırma arasındaki farkı belirlemek için bir dokunma eşiği kullanır.

  • İşaretçi, basılı durumdayken önemli ölçüde hareket ederse onClick iptal edilir.
  • İşaretçi, hareket sırasında önemli ölçüde geri giderse kaydırma hareketi geçersiz kılınır.

Örnek: Bir bileşendeki kaydırma ve tıklama işlemlerini ayarlama

Aşağıdaki kod, odaklanılabilir bir Box öğesinde kaydırma ve tıklama işlemlerini ayarlar:

@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")
    }
}

Kodla ilgili önemli noktalar

  • onIndirectPointerGesture için odaklanma gerektiğinden Box öğesini odaklanabilir hale getirmek için focusTarget da uygulanır. focusTarget veya surface gibi odaklanmayı sağlayan başka bir değiştirici kullanabilirsiniz. Odaklanma olmadan değiştirici, dolaylı işaretçi etkinliklerine göre işlem yapamaz.
  • Bu örnekte hem onSwipeForward hem de onClick geri çağırmaları uygulanır. Bu sayede, algılanan kaydırma ve tıklama hareketleri yakalanıp kullanılır ve üst kapsayıcılara ulaşmaz. Ancak bir hareketi üst kapsayıcıdaki bir onIndirectPointerGesture değiştiriciye iletmek için belirli bir geri çağırmayı boş bırakabilirsiniz.