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 Audio &
Tampilan

Pengubah onIndirectPointerGesture memungkinkan komponen menerima dan merespons peristiwa pointer tidak langsung tingkat tinggi, seperti yang berasal dari touchpad perangkat. Gunakan pengubah ini untuk merekam 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 jarak dan nilai minimum kecepatan dalam arah mundur.
  • Enabled: Jika disetel ke false, pengubah akan diabaikan dan tidak ada callback yang dipanggil.

Perilaku sistem untuk menggeser dan men-scroll

Sistem menggunakan nilai toleransi sentuh untuk membedakan antara klik dan geser.

  • Jika penunjuk bergerak secara signifikan selama status turun, onClick akan dibatalkan.
  • Jika kursor bergerak mundur secara signifikan selama gerakan, gestur geser dibatalkan.

Contoh: Menyiapkan penanganan untuk geser dan klik pada komponen

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

@Composable
@Sampled
fun OnIndirectPointerGestureSample() {
    Box(
        modifier =
            Modifier.fillMaxSize()
                .onIndirectPointerGesture(
                    enabled = true,
                    onSwipeForward = { /* onSwipeForward */ },
                    onSwipeBackward = { /* onSwipeBackward */ },
                    onClick = { /* onClick */ },
                )
                .focusTarget()
    ) {
        // App()
    }
}

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 pada peristiwa penunjuk tidak langsung.
  • Contoh ini mengimplementasikan callback onSwipeForward dan onClick, sehingga gestur geser dan klik yang terdeteksi akan dicegat dan digunakan, serta tidak menjangkau penampung induk. Namun, Anda juga dapat membiarkan callback tertentu bernilai null untuk meneruskan gestur ke pengubah onIndirectPointerGesture dalam penampung induk. -