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

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

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

يجب أن يرصد تطبيقك أحداث اللمس غير ذات الصلة ويتجاهلها. يُلغي Android لمسة راحة اليد من خلال إرسال عنصر MotionEvent إلى تطبيقك.

  • راجِع عناصر MotionEvent التي يتم إرسالها إلى تطبيقك. استخدِم واجهات برمجة التطبيقات MotionEvent لتحديد خصائص الأحداث (الإجراءات والعلامات):

    • أحداث المؤشر الفردي: ابحث عن ACTION_CANCEL. على Android 13 والإصدارات الأحدث، ابحث أيضًا عن 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، التي تشير إلى حدث مؤشر واحد على جميع مستويات واجهة برمجة التطبيقات. على نظام التشغيل Android 13 والإصدارات الأحدث، يُرجى التحقّق من ACTION_POINTER_UP للاطّلاع على FLAG_CANCELED.

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

النتائج

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

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

هذا الدليل هو جزء من مجموعات الأدلة السريعة المنظَّمة التي تتناول أهداف تطوير Android الأوسع نطاقًا:

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

إذا كانت لديك أسئلة أو ملاحظات

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