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