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 oluşturmanıza yardımcı olur.
Ses ve
Ekran Gözlükleri

onIndirectPointerGesture değiştiricisi, bileşenin 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 yüzeyden veya benzer bir kaynaktan gelen hareketleri yakalamak ve 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şlemi yapıldığında 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 yönde 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şlemi yapılmaz.

Kaydırma ve ekranı kaydırma için sistem davranışı

Sistem, tıklama ve kaydırma arasında ayrım yapmak için dokunma eğimi eşiğini 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şende kaydırma ve tıklama işlemlerinin nasıl ele alınacağını ayarlama

Aşağıdaki kod, odaklanılabilir bir Box üzerinde kaydırma ve tıklama işlemlerinin işlenmesini 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 odaklanmayı gerektirir. Bu nedenle, Box öğesinin odaklanılabilir olması için focusTarget de uygulanır. focusTarget veya surface gibi başka bir odaklanmayı etkinleştirme değiştiricisini kullanabilirsiniz. Odaklanma olmadan değiştirici, dolaylı işaretçi etkinliklerine göre hareket edemez.
  • Bu örnekte hem onSwipeForward hem de onClick geri çağırmaları uygulanır. Bu nedenle, algılanan kaydırma ve tıklama hareketleri yakalanıp tüketilir ve üst kapsayıcılara ulaşmaz. Ancak, bir hareketi üst kapsayıcıdaki onIndirectPointerGesture değiştiricisine iletmek için belirli bir geri çağırma işlevini boş da bırakabilirsiniz.