يمكن أن يكون القلم الرقمي أداة إنتاجية وإبداعية رائعة. ولكن عندما يرسم المستخدمون أو يكتبون أو يتفاعلون مع تطبيق باستخدام قلم شاشة، يلمسون الشاشة أحيانًا براحة أيديهم. يمكن إرسال حدث اللمس إلى تطبيقك قبل أن يتعرّف النظام على الحدث ويرفضه باعتباره لمسة عرضية من راحة اليد.
أفضل الممارسات
يجب أن يحدّد تطبيقك أحداث اللمس غير الضرورية ويتجاهلها. في Jetpack Compose، يمكنك الوصول إلى MotionEvent الأساسي في Android من خلال PointerEvent. ابحث في MotionEvent عن ACTION_CANCEL، ما يشير إلى أنّه يجب إيقاف الإيماءة وقد تحتاج إلى التراجع عنها. في نظام التشغيل Android 13 (المستوى 33 لواجهة برمجة التطبيقات) والإصدارات الأحدث، تحقَّق من العلامة FLAG_CANCELED في الحدثَين ACTION_CANCEL وACTION_POINTER_UP، ما يوفّر إشارة قوية إلى أنّ اللمس كان غير مقصود، مثل لمس راحة اليد.
المكوّنات
-
Modifier.pointerInput(): أداة التعديل Compose المستخدَمة لمعالجة إدخال المؤشر. -
PointerEvent: يمثّل حدث مؤشر في Compose، ويحتوي على تغيير واحد أو أكثر. -
PointerEvent.motionEvent: سمة إضافية توفّر إمكانية الوصول إلىMotionEventالأساسي لنظام التشغيل Android (يمكن أن تكون قيمته فارغة). MotionEvent: يمثّل أحداث اللمس والحركة. يحتوي على المعلومات اللازمة لتحديد ما إذا كان يجب تجاهل حدث معيّن.-
ACTION_CANCEL: الثابتMotionEventالذي يشير إلى أنّه تم إلغاء إيماءة، ويجب إيقاف الإيماءة وقد تحتاج إلى التراجع عنها. ACTION_POINTER_UP: الثابتMotionEventالذي يشير إلى أنّ مؤشرًا غير المؤشر الأول قد تم رفعه (أي تم إنهاء التفاعل مع شاشة الجهاز).FLAG_CANCELED: الثابتMotionEventالذي يشير إلى أنّ رفع المؤشر أدّى إلى حدث لمسة غير مقصود. تمت إضافته إلى حدثَيACTION_POINTER_UPوACTION_CANCELعلى الإصدار 13 من نظام التشغيل Android (المستوى 33 لواجهة برمجة التطبيقات) والإصدارات الأحدث.
الخطوات
افحص عناصر MotionEvent التي تم إرسالها إلى تطبيقك. استخدِم واجهات برمجة التطبيقات MotionEvent لتحديد خصائص الحدث:
- أحداث المؤشر الفردي: ابحث عن
ACTION_CANCEL، ما يشير إلى أنّه يجب إيقاف الإيماءة. على أجهزة Android 13 والإصدارات الأحدث، ابحث أيضًا عنFLAG_CANCELEDللتأكّد من أنّ اللمس كان غير مقصود. - أحداث المؤشرات المتعددة: على نظام التشغيل Android 13 والإصدارات الأحدث، تحقَّق من
ACTION_POINTER_UPوFLAG_CANCELEDلتحديد اللمسات غير المقصودة.
يمكنك الاستجابة لهذه الأحداث من خلال إيقاف الإيماءة والتراجع عن أي تغييرات مؤقتة.
1. الحصول على عناصر حدث الحركة
استخدِم Modifier.pointerInput لمعالجة إدخال المؤشر في عنصر قابل للإنشاء. ضمن نطاق إدخال المؤشر، استخدِم awaitPointerEventScope وawaitPointerEvent لتلقّي الأحداث، واسترداد MotionEvent الأساسي لنظام التشغيل Android باستخدام السمة motionEvent:
import androidx.compose.ui.input.pointer.pointerInput Box( modifier = Modifier .fillMaxSize() .pointerInput(Unit) { awaitPointerEventScope { while (true) { val event = awaitPointerEvent() val motionEvent = event.motionEvent if (motionEvent != null) { // Process motion event. } } } } )
2. تحديد إجراء الحدث وعلاماته
ابحث في MotionEvent عن ACTION_CANCEL، ما يشير إلى حدث مؤشر واحد على جميع مستويات واجهة برمجة التطبيقات. في الإصدار 13 من نظام التشغيل Android والإصدارات الأحدث، تحقَّق من ACTION_POINTER_UP
في FLAG_CANCELED:
import androidx.compose.ui.input.pointer.pointerInput Box( modifier = Modifier .fillMaxSize() .pointerInput(Unit) { awaitPointerEventScope { while (true) { val event = awaitPointerEvent() val motionEvent = event.motionEvent ?: continue when (motionEvent.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 && (motionEvent.flags and MotionEvent.FLAG_CANCELED) == MotionEvent.FLAG_CANCELED ) { // Process canceled multi-pointer motion event for Android 13 and higher. } } } } } } )
3- التراجع عن الإيماءة
بعد تحديد لمسة براحة اليد، يمكنك التراجع عن التأثيرات التي تظهر على الشاشة نتيجة الإيماءة.
يجب أن يحتفظ تطبيقك بسجلّ لإجراءات المستخدمين حتى يمكن التراجع عن الإدخالات غير المقصودة، مثل لمسات راحة اليد. يمكنك الاطّلاع على تنفيذ تطبيق رسم أساسي في الدرس التطبيقي حول الترميز تحسين إمكانية استخدام قلم الشاشة في تطبيق Android للحصول على مثال.
النتائج
يمكن لتطبيقك الآن تحديد اللمسات براحة اليد ورفضها في أحداث المؤشرات المتعددة على المستوى 13 من واجهة برمجة التطبيقات والإصدارات الأحدث، وفي أحداث المؤشر الفردي على جميع مستويات واجهة برمجة التطبيقات.
مراجع إضافية
لمزيد من المعلومات، يُرجى الاطّلاع على ما يلي:
- ميزات وواجهات برمجة التطبيقات في Android 13 — تحسين ميزة منع اللمس براحة اليد
- أدلة المطوّرين
- ميزات القلم المتقدّمة
- قسم منع لمس راحة اليد في مقالة التوافق مع أجهزة الإدخال على الشاشات الكبيرة
- درس تطبيقي حول الترميز: تحسين إمكانية استخدام قلم الشاشة في تطبيق Android