قلم میتواند ابزاری فوقالعاده پربازده و خلاقانه باشد. اما وقتی کاربران بااستفاده از قلم طراحی میکنند، مینویسند، یا با برنامهای تعامل برقرار میکنند، گاهی اوقات کف دستشان با صفحهنمایش تماس پیدا میکند. رویداد لمس میتواند قبلاز اینکه سیستم رویداد را بهعنوان لمس اتفاقی کف دست تشخیص دهد و آن را ببندد، به برنامهتان گزارش شود.
روالهای مطلوب
برنامه شما باید رویدادهای لمسی اضافی را شناسایی کند و آنها را نادیده بگیرد. در Jetpack
Compose، میتوانید ازطریق
PointerEvent به Android زیرین MotionEvent دسترسی پیدا کنید. MotionEvent را برای ACTION_CANCEL بررسی کنید، که
نشان میدهد اشاره باید متوقف شود و ممکن است نیاز به برگرداندن داشته باشد. در Android 13 (سطح API 33) و بالاتر، پرچم FLAG_CANCELED را در رویدادهای ACTION_CANCEL و ACTION_POINTER_UP بررسی کنید، که نشانهای قوی از غیرعمدی بودن لمس ارائه میدهد، مثلاً لمس با کف دست.
مواد تشکیلدهنده
Modifier.pointerInput(): اصلاحگر «ترکیب» برای پردازش ورودی اشارهگر استفاده میشود.PointerEvent: نشاندهنده رویداد اشارهگر در «نوشتن» است که شامل یک یا چند تغییر است.PointerEvent.motionEvent: دارایی افزونهای که دسترسی به AndroidMotionEventزیرین را فراهم میکند (تهیپذیر).MotionEvent: نشاندهنده رویدادهای لمس و حرکت است. حاوی اطلاعات لازم برای تعیین اینکه آیا رویدادی باید نادیده گرفته شود یا نه.ACTION_CANCEL: ثابتMotionEventکه نشان میدهد اشارهای لغو شده است؛ اشاره باید متوقف شود و ممکن است نیاز به برگرداندن داشته باشد.ACTION_POINTER_UP: ثابتMotionEventکه نشان میدهد اشارهگری بهجز اشارهگر اول بالا رفته است (یعنی تماس با صفحه دستگاه را رها کرده است).FLAG_CANCELED: ثابتMotionEventکه نشان میدهد اشارهگر درحال بالا رفتن باعث رویداد لمس غیرعمدی شده است. بهACTION_POINTER_UPوACTION_CANCELرویداد در Android 13 (سطح میانای برنامهسازی کاربردی ۳۳) و بالاتر اضافه شد.
قدمها
اشیاء MotionEvent ارسالشده به برنامهتان را بررسی کنید. از «میاناهای برنامهسازی کاربردی» MotionEvent
برای تعیین ویژگیهای رویداد استفاده کنید:
- رویدادهای تکاشارهای —
ACTION_CANCELرا بررسی کنید، که نشان میدهد اشاره باید متوقف شود. در Android 13 و نسخههای بالاتر، همچنینFLAG_CANCELEDرا بررسی کنید تا مطمئن شوید لمس غیرعمدی بوده است. - رویدادهای چند اشارهای — در Android 13 و نسخههای بالاتر،
ACTION_POINTER_UPوFLAG_CANCELEDرا بررسی کنید تا لمسهای ناخواسته را شناسایی کنید.
با متوقف کردن اشاره و برگرداندن تغییرات موقت، به این رویدادها پاسخ دهید.
۱. بهدست آوردن اشیای رویداد حرکتی
از Modifier.pointerInput برای پردازش ورودی اشارهگر در «ترکیبشدنی» استفاده کنید. در محدوده ورودی اشارهگر، از awaitPointerEventScope و awaitPointerEvent برای دریافت رویدادها استفاده کنید و MotionEvent زیرین Android را بااستفاده از دارایی 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 و سطوح API بالاتر و برای رویدادهای تکاشارهای در همه سطوح API شناسایی و رد کند.
منابع بیشتر
برای اطلاعات بیشتر، به موارد زیر مراجعه کنید:
- ویژگیها و میاناهای برنامهسازی کاربردی Android 13 — بهبود رد کردن کف دست
- راهنمای توسعهدهندگان
- ویژگیهای پیشرفته قلم
- بخش عدم تشخیص کف دست در سازگاری ورودی در صفحهنمایشهای بزرگ
- Codelab — بهبود دادن پشتیبانی از قلم در برنامه Android