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
MotionEventnesneleri inceleyin. Etkinlik özelliklerini (işlemler ve işaretler) belirlemek içinMotionEventAPI'lerini kullanın:- Tek işaretçili etkinlikler:
ACTION_CANCELolup olmadığını kontrol edin. Android 13 ve sonraki sürümlerdeFLAG_CANCELEDsimgesini de kontrol edin. - Çoklu işaretçi etkinlikleri: Android 13 ve sonraki sürümlerde
ACTION_POINTER_UPveFLAG_CANCELEDöğelerini kontrol edin.
- Tek işaretçili etkinlikler:
ACTION_CANCELveACTION_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():MotionEventnesnelerini 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 belirtenMotionEventsabiti.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österenMotionEventsabiti.FLAG_CANCELED: İşaretçinin yukarı gitmesinin, istenmeyen bir dokunma etkinliğine neden olduğunu belirtenMotionEventsabiti. Android 13 (API düzeyi 33) ve sonraki sürümlerdekiACTION_POINTER_UPveACTION_CANCELetkinliklerine 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: