عندما يرسم المستخدمون أو يكتبون أو يتفاعلون مع تطبيق باستخدام قلم شاشة، يلامسون أحيانًا الشاشة براحة أيديهم. قد يتم إرسال حدث اللمس إلى تطبيقك قبل أن يتعرّف النظام على الحدث ويرفضه باعتباره لمسة عرضية من راحة اليد.
يجب أن يحدّد تطبيقك أحداث اللمس غير الضرورية ويتجاهلها. تشير مستويات واجهة برمجة التطبيقات 13 والإصدارات الأحدث من Android إلى لمسات راحة اليد بشكل مختلف عن جميع مستويات واجهة برمجة التطبيقات الأخرى.
النتائج
يجب أن يكون تطبيقك قادرًا على التعرّف على لمسات راحة اليد ورفضها في أحداث المؤشرات المتعدّدة على الإصدار 13 من نظام التشغيل Android ومستويات واجهة برمجة التطبيقات الأحدث، وفي أحداث المؤشر الفردي على جميع مستويات واجهة برمجة التطبيقات.
التوافق مع الإصدارات
اضبط minSDK مشروعك على المستوى 33 لواجهة برمجة التطبيقات من أجل أحداث المؤشرات المتعددة.
تتوفّر أحداث المؤشر الفردي في مستويات واجهة برمجة التطبيقات.
التبعيات
بلا عُري
تحديد لمسات راحة اليد وتجاهلها
يلغي نظام التشغيل Android لمسة راحة اليد من خلال إرسال عنصر MotionEvent إلى تطبيقك.
افحص عناصر
MotionEventالتي تم إرسالها إلى تطبيقك. استخدِم واجهات برمجة التطبيقاتMotionEventلتحديد خصائص الأحداث (الإجراءات والعلامات):- أحداث المؤشر الفردي: ابحث عن
ACTION_CANCEL. في الإصدار 13 من نظام التشغيل Android والإصدارات الأحدث، ابحث أيضًا عن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، الذي يشير إلى حدث مؤشر واحد على جميع مستويات واجهة برمجة التطبيقات. في الإصدار 13 من نظام التشغيل Android والإصدارات الأحدث، ابحث عن FLAG_CANCELED. في ACTION_POINTER_UP
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 لواجهة برمجة التطبيقات) والإصدارات الأحدث.
المجموعات التي تتضمّن هذا الدليل
يشكّل هذا الدليل جزءًا من مجموعات "الأدلة السريعة" المنسّقة التي تغطي أهدافًا أوسع نطاقًا لتطوير تطبيقات Android: