لمس کف دست قلم را رد کنید

وقتی کاربران با استفاده از قلم نوری نقاشی می‌کنند، می‌نویسند یا با یک برنامه تعامل می‌کنند، گاهی اوقات صفحه را با کف دست خود لمس می‌کنند. رویداد لمس ممکن است قبل از اینکه سیستم آن را به عنوان یک لمس تصادفی کف دست تشخیص دهد و نادیده بگیرد، به برنامه شما گزارش شود.

برنامه شما باید رویدادهای لمسی نامربوط را شناسایی کرده و آنها را نادیده بگیرد. سطوح API اندروید ۱۳ و بالاتر، لمس کف دست را متفاوت از سایر سطوح API نشان می‌دهند.

نتایج

برنامه شما قادر است لمس کف دست را برای رویدادهای چند اشاره‌گری در اندروید ۱۳ و سطوح API بالاتر و برای رویدادهای تک اشاره‌گری در تمام سطوح API شناسایی و رد کند.

لمس کف دست را تشخیص داده و نادیده بگیرید

اندروید با ارسال یک شیء MotionEvent به برنامه شما، لمس کف دست را لغو می‌کند.

  • اشیاء MotionEvent که به برنامه شما ارسال می‌شوند را بررسی کنید. از APIهای MotionEvent برای تعیین ویژگی‌های رویداد (اعمال و پرچم‌ها) استفاده کنید:

    • رویدادهای تک‌منظوره - ACTION_CANCEL را بررسی کنید. در اندروید ۱۳ و بالاتر، FLAG_CANCELED را نیز بررسی کنید.
    • رویدادهای چند اشاره‌گری - در اندروید ۱۳ و بالاتر، ACTION_POINTER_UP و FLAG_CANCELED را بررسی کنید.
  • رویدادهای حرکتی که دارای ویژگی‌های ACTION_CANCEL و ACTION_POINTER_UP / FLAG_CANCELED هستند را نادیده بگیرید.

۱. اشیاء رویداد حرکتی را بدست آورید

یک OnTouchListener به برنامه خود اضافه کنید:

کاتلین

val myView = findViewById<View>(R.id.myView).apply {
    setOnTouchListener { view, event ->
        // Process motion event.
    }
}

جاوا

View myView = findViewById(R.id.myView);
myView.setOnTouchListener( (view, event) -> {
    // Process motion event.
});

۲. اقدام و پرچم‌های رویداد را تعیین کنید

ACTION_CANCEL را بررسی کنید که نشان دهنده یک رویداد تک اشاره‌گری در تمام سطوح API است. در اندروید ۱۳ و بالاتر، ACTION_POINTER_UP برای FLAG_CANCELED.

کاتلین

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
    }
}

جاوا

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;
});

۳. لغو حرکت

پس از اینکه لمس با کف دست را شناسایی کردید، می‌توانید اثرات روی صفحه نمایش آن حرکت را لغو کنید.

برنامه شما باید سابقه‌ای از اقدامات کاربر را نگه دارد تا ورودی‌های ناخواسته مانند لمس کف دست قابل لغو باشند. برای مثالی از نحوه نگهداری سابقه، به پیاده‌سازی یک برنامه طراحی اولیه در پشتیبانی از قلم Enhance در یک آزمایشگاه کد برنامه اندروید مراجعه کنید.

نکات کلیدی

  • MotionEvent : رویدادهای لمسی و حرکتی را نشان می‌دهد. حاوی اطلاعات لازم برای تعیین اینکه آیا یک رویداد باید نادیده گرفته شود یا خیر.
  • OnTouchListener#onTouch() : اشیاء MotionEvent را دریافت می‌کند.
  • MotionEvent#getActionMasked() : اکشن مرتبط با یک رویداد حرکتی را برمی‌گرداند.
  • ACTION_CANCEL : ثابت MotionEvent که نشان می‌دهد یک حرکت باید لغو شود.
  • ACTION_POINTER_UP : ثابت MotionEvent که نشان می‌دهد اشاره‌گری غیر از اشاره‌گر اول بالا رفته است (یعنی تماس با صفحه نمایش دستگاه را رها کرده است).
  • FLAG_CANCELED : ثابت MotionEvent که نشان می‌دهد بالا رفتن اشاره‌گر باعث یک رویداد لمس غیرعمدی شده است. به رویدادهای ACTION_POINTER_UP و ACTION_CANCEL در اندروید ۱۳ (سطح API ۳۳) و بالاتر اضافه شده است.

مجموعه‌هایی که حاوی این راهنما هستند

این راهنما بخشی از این مجموعه‌های راهنمای سریعِ برگزیده است که اهداف گسترده‌تر توسعه اندروید را پوشش می‌دهد:

برنامه خود را فعال کنید تا از یک تجربه کاربری بهینه در تبلت‌ها، دستگاه‌های تاشو و دستگاه‌های ChromeOS پشتیبانی کند.

سوالی یا بازخوردی دارید؟

به صفحه سوالات متداول ما بروید و درباره راهنماهای سریع اطلاعات کسب کنید یا با ما تماس بگیرید و نظرات خود را با ما در میان بگذارید.
،

وقتی کاربران با استفاده از قلم نوری نقاشی می‌کنند، می‌نویسند یا با یک برنامه تعامل می‌کنند، گاهی اوقات صفحه را با کف دست خود لمس می‌کنند. رویداد لمس ممکن است قبل از اینکه سیستم آن را به عنوان یک لمس تصادفی کف دست تشخیص دهد و نادیده بگیرد، به برنامه شما گزارش شود.

برنامه شما باید رویدادهای لمسی نامربوط را شناسایی کرده و آنها را نادیده بگیرد. سطوح API اندروید ۱۳ و بالاتر، لمس کف دست را متفاوت از سایر سطوح API نشان می‌دهند.

نتایج

برنامه شما قادر است لمس کف دست را برای رویدادهای چند اشاره‌گری در اندروید ۱۳ و سطوح API بالاتر و برای رویدادهای تک اشاره‌گری در تمام سطوح API شناسایی و رد کند.

لمس کف دست را تشخیص داده و نادیده بگیرید

اندروید با ارسال یک شیء MotionEvent به برنامه شما، لمس کف دست را لغو می‌کند.

  • اشیاء MotionEvent که به برنامه شما ارسال می‌شوند را بررسی کنید. از APIهای MotionEvent برای تعیین ویژگی‌های رویداد (اعمال و پرچم‌ها) استفاده کنید:

    • رویدادهای تک‌منظوره - ACTION_CANCEL را بررسی کنید. در اندروید ۱۳ و بالاتر، FLAG_CANCELED را نیز بررسی کنید.
    • رویدادهای چند اشاره‌گری - در اندروید ۱۳ و بالاتر، ACTION_POINTER_UP و FLAG_CANCELED را بررسی کنید.
  • رویدادهای حرکتی که دارای ویژگی‌های ACTION_CANCEL و ACTION_POINTER_UP / FLAG_CANCELED هستند را نادیده بگیرید.

۱. اشیاء رویداد حرکتی را بدست آورید

یک OnTouchListener به برنامه خود اضافه کنید:

کاتلین

val myView = findViewById<View>(R.id.myView).apply {
    setOnTouchListener { view, event ->
        // Process motion event.
    }
}

جاوا

View myView = findViewById(R.id.myView);
myView.setOnTouchListener( (view, event) -> {
    // Process motion event.
});

۲. اقدام و پرچم‌های رویداد را تعیین کنید

ACTION_CANCEL را بررسی کنید که نشان دهنده یک رویداد تک اشاره‌گری در تمام سطوح API است. در اندروید ۱۳ و بالاتر، ACTION_POINTER_UP برای FLAG_CANCELED.

کاتلین

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
    }
}

جاوا

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;
});

۳. لغو حرکت

پس از اینکه لمس با کف دست را شناسایی کردید، می‌توانید اثرات روی صفحه نمایش آن حرکت را لغو کنید.

برنامه شما باید سابقه‌ای از اقدامات کاربر را نگه دارد تا ورودی‌های ناخواسته مانند لمس کف دست قابل لغو باشند. برای مثالی از نحوه نگهداری سابقه، به پیاده‌سازی یک برنامه طراحی اولیه در پشتیبانی از قلم Enhance در یک آزمایشگاه کد برنامه اندروید مراجعه کنید.

نکات کلیدی

  • MotionEvent : رویدادهای لمسی و حرکتی را نشان می‌دهد. حاوی اطلاعات لازم برای تعیین اینکه آیا یک رویداد باید نادیده گرفته شود یا خیر.
  • OnTouchListener#onTouch() : اشیاء MotionEvent را دریافت می‌کند.
  • MotionEvent#getActionMasked() : اکشن مرتبط با یک رویداد حرکتی را برمی‌گرداند.
  • ACTION_CANCEL : ثابت MotionEvent که نشان می‌دهد یک حرکت باید لغو شود.
  • ACTION_POINTER_UP : ثابت MotionEvent که نشان می‌دهد اشاره‌گری غیر از اشاره‌گر اول بالا رفته است (یعنی تماس با صفحه نمایش دستگاه را رها کرده است).
  • FLAG_CANCELED : ثابت MotionEvent که نشان می‌دهد بالا رفتن اشاره‌گر باعث یک رویداد لمس غیرعمدی شده است. به رویدادهای ACTION_POINTER_UP و ACTION_CANCEL در اندروید ۱۳ (سطح API ۳۳) و بالاتر اضافه شده است.

مجموعه‌هایی که حاوی این راهنما هستند

این راهنما بخشی از این مجموعه‌های راهنمای سریعِ برگزیده است که اهداف گسترده‌تر توسعه اندروید را پوشش می‌دهد:

برنامه خود را فعال کنید تا از یک تجربه کاربری بهینه در تبلت‌ها، دستگاه‌های تاشو و دستگاه‌های ChromeOS پشتیبانی کند.

سوالی یا بازخوردی دارید؟

به صفحه سوالات متداول ما بروید و درباره راهنماهای سریع اطلاعات کسب کنید یا با ما تماس بگیرید و نظرات خود را با ما در میان بگذارید.