عندما يرسم المستخدمون أو يكتبون أو يتفاعلون مع تطبيق باستخدام قلم شاشة، يمسهم أحيانًا براحة أيديهم على الشاشة. قد يتم الإبلاغ عن حدث اللمس لتطبيقك قبل أن يرصد النظام الحدث ويغلقه على أنّه لمسة غير مقصودة باليد.
تحديد لمسات راحة اليد وتجاهلها
يجب أن يرصد تطبيقك أحداث اللمس غير ذات الصلة ويتجاهلها. يُلغي Android
لمسة راحة اليد من خلال إرسال عنصر MotionEvent
إلى تطبيقك.
راجِع عناصر
MotionEvent
التي يتم إرسالها إلى تطبيقك. استخدِم واجهات برمجة التطبيقاتMotionEvent
لتحديد خصائص الأحداث (الإجراءات والعلامات):- أحداث المؤشر الفردي: ابحث عن
ACTION_CANCEL
. على Android 13 والإصدارات الأحدث، ابحث أيضًا عنFLAG_CANCELED
. - أحداث مؤشرات متعددة: في الإصدار 13 من نظام التشغيل Android والإصدارات الأحدث، تحقَّق من
ACTION_POINTER_UP
وFLAG_CANCELED
.
- أحداث المؤشر الفردي: ابحث عن
تجاهل أحداث الحركة التي تحتوي على السمتَين
ACTION_CANCEL
وACTION_POINTER_UP
/FLAG_CANCELED
.
1. الحصول على عناصر أحداث الحركة
أضِف OnTouchListener
إلى تطبيقك:
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- تحديد إجراء الحدث والعلامات
ابحث عن ACTION_CANCEL
، التي تشير إلى حدث مؤشر واحد على جميع مستويات
واجهة برمجة التطبيقات. على نظام التشغيل Android 13 والإصدارات الأحدث، يُرجى التحقّق من ACTION_POINTER_UP
للاطّلاع على 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- التراجع عن الإيماءة
بعد تحديد لمسة راحة اليد، يمكنك التراجع عن التأثيرات التي تظهر على الشاشة نتيجةً للإيماءة.
يجب أن يحتفظ تطبيقك بسجلّ لإجراءات المستخدمين حتى يمكن التراجع عن الإدخالات غير المقصودة، مثل لمسات راحة اليد. للحصول على مثال على كيفية الاحتفاظ بالسجلّ، يمكنك الاطّلاع على الدرس التطبيقي حول الترميز تنفيذ تطبيق رسم أساسي في تحسين ميزة استخدام قلم الشاشة في أحد تطبيقات Android.
النقاط الرئيسية
MotionEvent
: يمثّل أحداث اللمس والحركة. يحتوي على المعلومات اللازمة لتحديد ما إذا كان يجب تجاهل حدث معيّن.-
OnTouchListener#onTouch()
: تتلقّىMotionEvent
عنصرًا. MotionEvent#getActionMasked()
: تعرِض هذه الدالة الإجراء المرتبط بأحد أحداث الحركة.-
ACTION_CANCEL
: ثابتMotionEvent
يشير إلى أنّه يجب قلب إشارة تعبيرية. -
ACTION_POINTER_UP
: ثابتMotionEvent
يشير إلى أنّ المؤشر باستثناء المؤشر الأول قد تم رفعه (أي أنه قد توقّف عن اللمس بشاشة الجهاز). -
FLAG_CANCELED
: ثابتMotionEvent
يشير إلى أنّ المؤشر الانتقال للأعلى تسبّب في حدث لمس غير مقصود. تمت إضافتها إلى حدثَيACTION_POINTER_UP
وACTION_CANCEL
على الإصدار 13 من نظام التشغيل Android (المستوى 33 لواجهة برمجة التطبيقات) والإصدارات الأحدث.
النتائج
يمكن لتطبيقك الآن رصد لمسات راحة اليد ورفضها لأحداث مؤشرات متعددة على مستويات واجهة برمجة التطبيقات في الإصدار 13 من Android والإصدارات الأحدث، ولأحداث مؤشر واحد على جميع مستويات واجهة برمجة التطبيقات.
المجموعات التي تتضمّن هذا الدليل
هذا الدليل هو جزء من مجموعات الأدلة السريعة المنظَّمة التي تتناول أهداف تطوير Android الأوسع نطاقًا:
![](https://developer.android.google.cn/static/images/quick-guides/collection-illustration.png?hl=ar)