عدم پذیرش کف دست با قلم

نماد رده‌بندی پنج ستاره

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

روال‌های مطلوب

برنامه شما باید رویدادهای لمسی نامربوط را شناسایی کند و آن‌ها را نادیده بگیرد. در Jetpack Compose، می‌توانید از PointerEvent به MotionEvent Android زیرین دسترسی داشته باشید. MotionEvent را برای ACTION_CANCEL بررسی کنید، که نشان می‌دهد اشاره باید متوقف شود و ممکن است لازم باشد برگردانده شود. در Android 13 (سطح API‏ ۳۳) و بالاتر، پرچم 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 رویداد در Android 13 (سطح میانای برنامه‌سازی کاربردی ۳۳) و بالاتر اضافه شد.

قدم‌ها

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

  • رویدادهای تک‌اشاره‌گر — ACTION_CANCEL را بررسی کنید که نشان می‌دهد اشاره باید متوقف شود. در Android نسخه ۱۳ و بالاتر، FLAG_CANCELED را نیز بررسی کنید تا مطمئن شوید لمس ناخواسته بوده است.
  • رویدادهای چندنشانگری — در Android 13 و نسخه‌های بالاتر، ACTION_POINTER_UP و FLAG_CANCELED را برای شناسایی لمس‌های ناخواسته بررسی کنید.

با متوقف کردن اشاره و برگرداندن هرگونه تغییر موقت، به این رویدادها پاسخ دهید.

۱. دریافت اشیای رویداد حرکتی

از Modifier.pointerInput برای پردازش ورودی اشاره‌گر در Composable استفاده کنید. در محدوده ورودی اشاره‌گر، از awaitPointerEventScope و awaitPointerEvent برای دریافت رویدادها استفاده کنید و Android MotionEvent زیربنایی را بااستفاده از ویژگی 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.
                        }
                    }
                }
            }
    )

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

MotionEvent را برای ACTION_CANCEL بررسی کنید که نشان‌دهنده رویداد تک‌اشاره‌گر در همه سطوح میانای برنامه‌سازی کاربردی است. در Android 13 و بالاتر، 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.
                                }
                            }
                        }
                    }
                }
            }
    )

۳. واگرداندن اشاره

وقتی لمس کف دست را شناسایی کردید، می‌توانید جلوه‌های روی صفحه اشاره را واگرد کنید.

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

نتایج

برنامه شما اکنون می‌تواند لمس کف دست را برای رویدادهای چندنشانگری در Android 13 و سطوح بالاتر میانای برنامه‌سازی کاربردی و برای رویدادهای تک‌نشانگری در همه سطوح میانای برنامه‌سازی کاربردی شناسایی و رد کند.

منابع بیشتر

برای اطلاعات بیشتر، به موارد زیر مراجعه کنید: