هنگامی که کاربران با استفاده از یک قلم طراحی میکنند، مینویسند یا با یک برنامه تعامل میکنند، گاهی اوقات صفحه را با کف دست لمس میکنند. رویداد لمسی ممکن است قبل از اینکه سیستم رویداد را بهعنوان لمس تصادفی کف دست تشخیص دهد و رد کند، به برنامه شما گزارش شود.
لمس کف دست را شناسایی و نادیده بگیرید
برنامه شما باید رویدادهای لمسی خارجی را شناسایی کند و آنها را نادیده بگیرد. Android با ارسال یک شی MotionEvent
به برنامه شما، لمس کف دست را لغو می کند.
اشیاء
MotionEvent
ارسال شده به برنامه شما را بررسی کنید. از API هایMotionEvent
برای تعیین ویژگی های رویداد (عملکردها و پرچم ها) استفاده کنید:- رویدادهای تک اشاره ای —
ACTION_CANCEL
را بررسی کنید. در Android نسخه 13 و بالاتر،FLAG_CANCELED
را نیز بررسی کنید. - رویدادهای چند نشانگر — در Android نسخه 13 و بالاتر،
ACTION_POINTER_UP
وFLAG_CANCELED
را بررسی کنید.
- رویدادهای تک اشاره ای —
رویدادهای حرکتی که دارای ویژگیهای
ACTION_CANCEL
وACTION_POINTER_UP
/FLAG_CANCELED
هستند را نادیده بگیرید.
1. اشیاء رویداد حرکتی را بدست آورید
یک 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. });
2. عمل رویداد و پرچم ها را تعیین کنید
ACTION_CANCEL
را بررسی کنید، که نشاندهنده یک رویداد تک نقطهای در همه سطوح API است. در Android 13 و بالاتر، 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; });
3. ژست را لغو کنید
بعد از اینکه لمس کف دست را تشخیص دادید، میتوانید جلوههای ژست روی صفحه را لغو کنید.
برنامه شما باید تاریخچه ای از اقدامات کاربر داشته باشد تا بتوان ورودی های ناخواسته مانند لمس کف دست را لغو کرد. برای مثالی از نحوه نگهداری تاریخچه، به پیادهسازی یک برنامه طراحی اولیه در تقویت پشتیبانی قلم در یک کد برنامه Android مراجعه کنید.
نکات کلیدی
-
MotionEvent
: رویدادهای لمسی و حرکتی را نشان می دهد. حاوی اطلاعات لازم برای تعیین اینکه آیا یک رویداد باید نادیده گرفته شود یا خیر. -
OnTouchListener#onTouch()
: اشیاءMotionEvent
را دریافت می کند. -
MotionEvent#getActionMasked()
: عمل مرتبط با یک رویداد حرکتی را برمیگرداند. -
ACTION_CANCEL
: ثابتMotionEvent
که نشان میدهد یک حرکت باید لغو شود. -
ACTION_POINTER_UP
: ثابتMotionEvent
که نشان میدهد نشانگر دیگری غیر از اولین نشانگر بالا رفته است (یعنی تماس با صفحه دستگاه را قطع کرده است). -
FLAG_CANCELED
: ثابتMotionEvent
که نشان میدهد بالا رفتن نشانگر باعث یک رویداد لمسی غیرعمدی شده است. به رویدادهایACTION_POINTER_UP
وACTION_CANCEL
در Android 13 (سطح API 33) و بالاتر اضافه شد.
نتایج
برنامه شما اکنون میتواند لمس کف دست را برای رویدادهای چند اشارهگر در Android 13 و سطوح API بالاتر و رویدادهای تک اشارهای در همه سطوح API شناسایی و رد کند.
مجموعه هایی که حاوی این راهنما هستند
این راهنما بخشی از مجموعههای راهنمای Quick Guide است که اهداف توسعه Android گستردهتری را پوشش میدهد:
![](https://developer.android.com/static/images/quick-guides/collection-illustration.png?hl=fa)