Menangani input penunjuk tidak langsung di Jetpack Compose Glimmer

Perangkat XR yang kompatibel
Panduan ini membantu Anda membangun pengalaman untuk jenis perangkat XR ini.
Kacamata Pintar dengan Layar

Pengubah onIndirectPointerGesture memungkinkan komponen menerima dan merespons peristiwa pointer tidak langsung tingkat tinggi, seperti yang berasal dari touchpad perangkat. Gunakan pengubah ini untuk menangkap dan memproses gestur yang berasal dari touchpad atau sumber serupa.

Platform API

Ada empat callback yang dapat digunakan aplikasi Anda untuk mengontrol penanganan:

  • onClick: Dipicu saat ketukan atau klik berhasil tanpa gerakan horizontal yang signifikan.
  • onSwipeForward: Dipicu saat geser horizontal melebihi nilai minimum jarak dan kecepatan ke arah depan.
  • onSwipeBackward: Dipicu saat geser horizontal melebihi nilai minimum jarak dan kecepatan ke arah mundur.
  • Enabled: Jika ditetapkan ke false, pengubah akan diabaikan dan tidak ada callback yang dipanggil.

Perilaku sistem untuk menggeser dan men-scroll

Sistem menggunakan nilai minimum slop sentuh untuk membedakan antara klik dan geser.

  • Jika pointer bergerak secara signifikan selama status tekan, onClick akan dibatalkan.
  • Jika pointer mundur secara signifikan selama gerakan, gestur geser akan dibatalkan.

Contoh: Menyiapkan penanganan untuk geser dan klik pada komponen

Kode berikut menyiapkan penanganan untuk geser dan klik pada Box yang dapat difokuskan:

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

Poin penting tentang kode

  • onIndirectPointerGesture memerlukan fokus, sehingga focusTarget juga diterapkan untuk membuat Box dapat difokuskan. Anda dapat menggunakan focusTarget atau pengubah lain yang mengaktifkan fokus seperti surface. Tanpa fokus, pengubah tidak dapat bertindak berdasarkan peristiwa pointer tidak langsung.
  • Contoh ini mengimplementasikan callback onSwipeForward dan onClick, sehingga gestur geser dan klik yang terdeteksi akan dicegat dan digunakan, serta tidak menjangkau ke luar ke penampung induk. Namun, Anda juga dapat membiarkan callback tertentu null untuk meneruskan gestur ke pengubah onIndirectPointerGesture dalam penampung induk.