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

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

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

برنامه شما باید رویدادهای لمسی خارجی را شناسایی کند و آنها را نادیده بگیرد. 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 گسترده‌تری را پوشش می‌دهد:

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

سوال یا بازخورد داشته باشید

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