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

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

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

النتائج

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

تحديد لمسات راحة اليد وتجاهلها

يلغي نظام التشغيل 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 لواجهة برمجة التطبيقات) والإصدارات الأحدث.

المجموعات التي تتضمّن هذا الدليل

يشكّل هذا الدليل جزءًا من مجموعات &quot;الدليل السريع&quot; المنسّقة التي تغطي أهدافًا أوسع لتطوير تطبيقات Android:

تفعيل تطبيقك ليتوافق مع تجربة مستخدم محسَّنة على الأجهزة اللوحية والأجهزة القابلة للطي وأجهزة ChromeOS

هل لديك أسئلة أو ملاحظات؟

يمكنك الانتقال إلى صفحة الأسئلة الشائعة والاطّلاع على الأدلة السريعة أو التواصل معنا وإعلامنا بأفكارك.