Kullanıcılar ekran kalemiyle çizim yaparken, yazarken veya bir uygulamayla etkileşimde bulunurken bazen avuçlarıyla ekrana dokunur. Dokunma etkinliği, sistem etkinliği yanlışlıkla avuç içiyle dokunma olarak tanıyıp kapatmadan önce uygulamanıza bildirilebilir.
Uygulamanız, gereksiz dokunma etkinliklerini tanımlamalı ve bunları yoksaymalıdır. Android 13 ve daha yüksek API düzeyleri, avuç içiyle dokunmaları diğer tüm API düzeylerinden farklı şekilde gösterir.
Sonuçlar
Uygulamanız, Android 13 ve sonraki API düzeylerinde çoklu işaretçi etkinlikleri için, tüm API düzeylerinde ise tek işaretçi etkinlikleri için avuç içi dokunuşlarını tanımlayıp reddedebiliyor.
Avuç içi dokunuşlarını tanımlama ve yoksayma
Android, uygulamanıza bir MotionEvent
nesnesi göndererek avuç içiyle dokunma işlemini iptal eder.
Uygulamanıza gönderilen
MotionEvent
nesneleri inceleyin. Etkinlik özelliklerini (işlemler ve işaretler) belirlemek içinMotionEvent
API'lerini kullanın:- Tek işaretçili etkinlikler:
ACTION_CANCEL
olup olmadığını kontrol edin. Android 13 ve sonraki sürümlerdeFLAG_CANCELED
simgesini de kontrol edin. - Çoklu işaretçi etkinlikleri: Android 13 ve sonraki sürümlerde
ACTION_POINTER_UP
veFLAG_CANCELED
öğelerini kontrol edin.
- Tek işaretçili etkinlikler:
ACTION_CANCEL
veACTION_POINTER_UP
/FLAG_CANCELED
özelliklerine sahip hareket etkinliklerini yoksayın.
1. Hareket etkinliği nesnelerini edinme
Uygulamanıza OnTouchListener
ekleme:
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. Etkinlik işlemini ve işaretlerini belirleme
Tüm API düzeylerinde tek işaretçili bir etkinliği gösteren ACTION_CANCEL
simgesini arayın. Android 13 ve sonraki sürümlerde ACTION_POINTER_UP
için FLAG_CANCELED.
simgesini kontrol edin.
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. Hareketi geri alma
Avuç içiyle dokunmayı belirledikten sonra hareketin ekrandaki etkilerini geri alabilirsiniz.
Uygulamanız, kullanıcı işlemlerinin geçmişini tutmalıdır. Böylece, avuç içiyle dokunma gibi istenmeyen girişler geri alınabilir. Geçmişin nasıl korunacağına dair bir örnek için Android uygulamasında kalem desteğini geliştirme codelab'indeki Temel bir çizim uygulaması oluşturma bölümüne bakın.
Önemli noktalar
MotionEvent
: Dokunma ve hareket etkinliklerini gösterir. Bir etkinliğin göz ardı edilip edilmeyeceğini belirlemek için gerekli bilgileri içerir.OnTouchListener#onTouch()
:MotionEvent
nesnelerini alır.MotionEvent#getActionMasked()
: Bir hareket etkinliğiyle ilişkili işlemi döndürür.ACTION_CANCEL
: Bir hareketin geri alınması gerektiğini belirtenMotionEvent
sabiti.ACTION_POINTER_UP
: İlk işaretçi dışındaki bir işaretçinin yukarı çıktığını (yani cihaz ekranıyla teması bıraktığını) gösterenMotionEvent
sabiti.FLAG_CANCELED
: İşaretçinin yukarı gitmesinin, istenmeyen bir dokunma etkinliğine neden olduğunu belirtenMotionEvent
sabiti. Android 13 (API düzeyi 33) ve sonraki sürümlerdekiACTION_POINTER_UP
veACTION_CANCEL
etkinliklerine eklendi.
Bu kılavuzu içeren koleksiyonlar
Bu kılavuz, daha geniş Android geliştirme hedeflerini kapsayan şu seçilmiş Hızlı Kılavuz koleksiyonlarının bir parçasıdır:
