Saat menggambar, menulis, atau berinteraksi dengan aplikasi menggunakan stilus, terkadang pengguna menyentuh layar dengan telapak tangan mereka. Peristiwa sentuh mungkin dilaporkan ke aplikasi Anda sebelum sistem mengenali dan menolak peristiwa sebagai sentuhan telapak tangan yang tidak disengaja.
Mengidentifikasi dan mengabaikan sentuhan telapak tangan
Aplikasi Anda harus mengidentifikasi peristiwa sentuh yang tidak relevan dan mengabaikannya. Android membatalkan
sentuhan telapak tangan dengan mengirim objek MotionEvent
ke aplikasi Anda.
Periksa objek
MotionEvent
yang dikirim ke aplikasi Anda. GunakanMotionEvent
API untuk menentukan properti peristiwa (tindakan dan tanda):- Peristiwa pointer tunggal — Periksa
ACTION_CANCEL
. Di Android 13 dan yang lebih tinggi, periksa jugaFLAG_CANCELED
. - Peristiwa multi-pointer — Di Android 13 dan yang lebih tinggi, periksa
ACTION_POINTER_UP
danFLAG_CANCELED
.
- Peristiwa pointer tunggal — Periksa
Abaikan peristiwa gerakan yang memiliki properti
ACTION_CANCEL
danACTION_POINTER_UP
/FLAG_CANCELED
.
1. Mendapatkan objek peristiwa gerakan
Tambahkan OnTouchListener
ke aplikasi Anda:
Kotlin
val myView = findViewById<View>(R.id.myView).apply { setOnTouchListener { view, event -> // Process motion event. } }
Java
View myView = findViewById(R.id.myView); myView.setOnTouchListener( (view, event) -> { // Process motion event. });
2. Menentukan tindakan dan tanda peristiwa
Periksa ACTION_CANCEL
, yang menunjukkan peristiwa pointer tunggal di semua level
API. Di Android 13 dan yang lebih baru, lihat ACTION_POINTER_UP
untuk FLAG_CANCELED.
Kotlin
val myView = findViewById<View>(R.id.myView).apply { setOnTouchListener { view, event -> when (event.actionMasked) { MotionEvent.ACTION_CANCEL -> { //Process canceled single-pointer motion event for all SDK versions. } MotionEvent.ACTION_POINTER_UP -> { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU && (event.flags and MotionEvent.FLAG_CANCELED) == MotionEvent.FLAG_CANCELED) { //Process canceled multi-pointer motion event for Android 13 and higher. } } } true } }
Java
View myView = findViewById(R.id.myView); myView.setOnTouchListener( (view, event) -> { switch (event.getActionMasked()) { case MotionEvent.ACTION_CANCEL: // Process canceled single-pointer motion event for all SDK versions. case MotionEvent.ACTION_UP: if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU && (event.getFlags() & MotionEvent.FLAG_CANCELED) == MotionEvent.FLAG_CANCELED) { //Process canceled multi-pointer motion event for Android 13 and higher. } } return true; });
3. Mengurungkan gestur
Setelah mengidentifikasi sentuhan telapak tangan, Anda dapat mengurungkan efek gestur di layar.
Aplikasi Anda harus menyimpan histori tindakan pengguna sehingga input yang tidak disengaja seperti sentuhan telapak tangan dapat diurungkan. Untuk contoh cara mempertahankan histori, lihat Mengimplementasikan aplikasi gambar dasar di codelab Meningkatkan dukungan stilus di aplikasi Android.
Poin utama
MotionEvent
: Mewakili peristiwa sentuh dan gerakan. Berisi informasi yang diperlukan untuk menentukan apakah suatu peristiwa harus diabaikan.OnTouchListener#onTouch()
: Menerima objekMotionEvent
.MotionEvent#getActionMasked()
: Menampilkan tindakan yang terkait dengan peristiwa gerakan.ACTION_CANCEL
: KonstantaMotionEvent
yang menunjukkan gestur harus diurungkan.ACTION_POINTER_UP
: KonstantaMotionEvent
yang menunjukkan pointer selain pointer pertama telah naik (yaitu, telah melepaskan kontak dengan layar perangkat).FLAG_CANCELED
: KonstantaMotionEvent
yang menunjukkan bahwa pointer naik menyebabkan peristiwa sentuh yang tidak disengaja. Ditambahkan ke peristiwaACTION_POINTER_UP
danACTION_CANCEL
di Android 13 (level API 33) dan yang lebih baru.
Hasil
Aplikasi Anda kini dapat mengidentifikasi dan menolak sentuhan telapak tangan untuk peristiwa multi-pointer di Android 13 dan level API yang lebih tinggi, serta untuk peristiwa pointer tunggal di semua level API.
Koleksi yang berisi panduan ini
Panduan ini adalah bagian dari koleksi Panduan Cepat pilihan yang membahas sasaran pengembangan Android yang lebih luas:
![](https://developer.android.google.cn/static/images/quick-guides/collection-illustration.png?hl=id)