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

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

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

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

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

مراجع إضافية

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