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 kefalse, 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,
onClickakan 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
onIndirectPointerGesturememerlukan fokus, sehinggafocusTargetjuga diterapkan untuk membuatBoxdapat difokuskan. Anda dapat menggunakanfocusTargetatau pengubah lain yang mengaktifkan fokus sepertisurface. Tanpa fokus, pengubah tidak dapat bertindak berdasarkan peristiwa pointer tidak langsung.- Contoh ini mengimplementasikan callback
onSwipeForwarddanonClick, 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 pengubahonIndirectPointerGesturedalam penampung induk.