قلم میتواند ابزاری فوقالعاده برای بهرهوری و خلاقیت باشد. اما وقتی کاربران بااستفاده از قلم در برنامهای طراحی میکنند، مینویسند، یا با آن تعامل برقرار میکنند، گاهی کف دستشان را روی صفحهنمایش میگذارند. رویداد لمسی میتواند قبلاز اینکه سیستم رویداد را بهعنوان لمس تصادفی کف دست تشخیص دهد و رد کند، به برنامه شما گزارش شود.
روالهای مطلوب
برنامه شما باید رویدادهای لمسی نامربوط را شناسایی کند و آنها را نادیده بگیرد. در 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: ویژگی افزونهای که دسترسی بهMotionEventAndroid زیرین را فراهم میکند (قابلتهیسازی).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 و سطوح بالاتر میانای برنامهسازی کاربردی و برای رویدادهای تکنشانگری در همه سطوح میانای برنامهسازی کاربردی شناسایی و رد کند.
منابع بیشتر
برای اطلاعات بیشتر، به موارد زیر مراجعه کنید:
- ویژگیها و میاناهای برنامهسازی کاربردی Android 13 — بهبود رد کردن کف دست
- راهنمای توسعهدهندگان
- ویژگیهای پیشرفته قلم
- بخش رد کردن لمس کف دست در سازگاری ورودی در صفحهنمایشهای بزرگ
- Codelab — بهبود دادن پشتیبانی از قلم در برنامه Android