رفض راحة اليد بقلم الشاشة

رمز التقييم بخمس نجوم

يمكن أن يكون قلم الشاشة أداة فعّالة للغاية لتعزيز الإنتاجية والإبداع. ولكن عندما يرسم المستخدمون أو يكتبون أو يتفاعلون مع تطبيق باستخدام قلم شاشة، فإنّهم يلمسون الشاشة أحيانًا براحة أيديهم. يمكن إرسال حدث اللمس إلى تطبيقك قبل أن يتعرّف النظام على الحدث ويرفضه باعتباره لمسة غير مقصودة براحة اليد.

أفضل الممارسات

يجب أن يحدّد تطبيقك أحداث اللمس غير الضرورية ويتجاهلها. في 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 والإصدارات الأحدث من مستويات واجهة برمجة التطبيقات ولأحداث المؤشر الواحد على جميع مستويات واجهة برمجة التطبيقات.

مراجع إضافية

لمزيد من المعلومات، يُرجى الاطّلاع على ما يلي: