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

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

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

النتائج

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

التوافق مع الإصدارات

اضبط minSDK لمشروعك على مستوى واجهة برمجة التطبيقات 33 للأحداث المتعدّدة المؤشرات. تتوفّر الأحداث ذات المؤشر الواحد على مستويات واجهة برمجة التطبيقات.

الطلبات التابعة

بلا عُري

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

يلغي 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 والإصدارات الأحدث، ابحث عن 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 app.

النقاط الرئيسية

  • MotionEvent: يمثّل أحداث اللمس والحركة. يحتوي على المعلومات اللازمة لتحديد ما إذا كان يجب تجاهل حدث معيّن.
  • OnTouchListener#onTouch(): يتلقّى عناصر MotionEvent.
  • MotionEvent#getActionMasked(): يعرض الإجراء المرتبط بمسجّل الحركات.
  • ACTION_CANCEL: ثابت MotionEvent يشير إلى أنّه يجب التراجع عن إيماءة.
  • ACTION_POINTER_UP: ثابت MotionEvent يشير إلى أنّ مؤشرًا غير المؤشر الأول قد تم رفعه (أي تم رفع الإصبع عن شاشة الجهاز).
  • FLAG_CANCELED: ثابت MotionEvent يشير إلى أنّ المؤشر الذي تم رفعه تسبّب في حدث لمس غير مقصود. تمت إضافته إلى أحداث ACTION_POINTER_UP وACTION_CANCEL على الإصدار 13 من Android (المستوى 33 من واجهة برمجة التطبيقات) والإصدارات الأحدث.

المجموعات التي تحتوي على هذا الدليل

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

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

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

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