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.
Aplikasi Anda harus mengidentifikasi peristiwa sentuh yang tidak relevan dan mengabaikannya. Level API Android 13 dan yang lebih tinggi menunjukkan sentuhan telapak tangan secara berbeda dari semua level API lainnya.
Hasil
Aplikasi Anda 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.
Kompatibilitas versi
Tetapkan minSDK project Anda ke level API 33 untuk peristiwa multi-pointer.
Peristiwa pointer tunggal didukung di level API.
Dependensi
Tidak ada.
Mengidentifikasi dan mengabaikan sentuhan telapak tangan
Android membatalkan sentuhan telapak tangan dengan mengirim objek MotionEvent ke aplikasi
Anda.
Periksa objek
MotionEventyang dikirim ke aplikasi Anda. GunakanMotionEventAPI untuk menentukan properti peristiwa (tindakan dan flag):- 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_UPdanFLAG_CANCELED.
- Peristiwa pointer tunggal — Periksa
Abaikan peristiwa gerakan yang memiliki properti
ACTION_CANCELdanACTION_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 tinggi, periksa 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 mengetahui contoh cara mempertahankan histori, lihat Mengimplementasikan aplikasi gambar dasar di Meningkatkan dukungan stilus di aplikasi Android app codelab.
Poin-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: KonstantaMotionEventyang menunjukkan gestur harus diurungkan.ACTION_POINTER_UP: KonstantaMotionEventyang menunjukkan pointer selain pointer pertama telah naik (yaitu, telah melepaskan kontak dengan layar perangkat).FLAG_CANCELED: KonstantaMotionEventyang menunjukkan bahwa pointer naik menyebabkan peristiwa sentuh yang tidak disengaja. Menambahkan peristiwaACTION_POINTER_UPdanACTION_CANCELdi Android 13 (level API 33) dan versi yang lebih baru.
Koleksi yang berisi panduan ini
Panduan ini adalah bagian dari koleksi Panduan Singkat pilihan yang mencakup sasaran pengembangan Android yang lebih luas: