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

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

برنامه شما باید رویدادهای لمسی نامربوط را شناسایی کرده و آنها را نادیده بگیرد. سطوح API اندروید ۱۳ و بالاتر، لمس کف دست را متفاوت از سایر سطوح API نشان می‌دهند.

نتایج

برنامه شما قادر است لمس کف دست را برای رویدادهای چند اشاره‌گری در اندروید ۱۳ و سطوح API بالاتر و برای رویدادهای تک اشاره‌گری در تمام سطوح API شناسایی و رد کند.

سازگاری نسخه

برای رویدادهای چند اشاره‌گری، minSDK پروژه خود را روی سطح API 33 تنظیم کنید. رویدادهای تک اشاره‌گری در سطوح API پشتیبانی می‌شوند.

Dependencies

هیچ کدام.

Identify and ignore palm touches

اندروید با ارسال یک شیء MotionEvent به برنامه شما، لمس کف دست را لغو می‌کند.

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

    • رویدادهای تک‌منظوره - ACTION_CANCEL را بررسی کنید. در اندروید ۱۳ و بالاتر، FLAG_CANCELED را نیز بررسی کنید.
    • رویدادهای چند اشاره‌گری - در اندروید ۱۳ و بالاتر، ACTION_POINTER_UP و FLAG_CANCELED را بررسی کنید.
  • رویدادهای حرکتی که دارای ویژگی‌های ACTION_CANCEL و ACTION_POINTER_UP / FLAG_CANCELED هستند را نادیده بگیرید.

1. Acquire motion event objects

Add an OnTouchListener to your app:

کاتلین

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. Determine the event action and flags

ACTION_CANCEL را بررسی کنید که نشان دهنده یک رویداد تک اشاره‌گری در تمام سطوح API است. در اندروید ۱۳ و بالاتر، 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. Undo the gesture

پس از اینکه لمس با کف دست را شناسایی کردید، می‌توانید اثرات روی صفحه نمایش آن حرکت را لغو کنید.

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

Key points

  • MotionEvent : رویدادهای لمسی و حرکتی را نشان می‌دهد. حاوی اطلاعات لازم برای تعیین اینکه آیا یک رویداد باید نادیده گرفته شود یا خیر.
  • OnTouchListener#onTouch() : اشیاء MotionEvent را دریافت می‌کند.
  • MotionEvent#getActionMasked() : اکشن مرتبط با یک رویداد حرکتی را برمی‌گرداند.
  • ACTION_CANCEL : ثابت MotionEvent که نشان می‌دهد یک حرکت باید لغو شود.
  • ACTION_POINTER_UP : ثابت MotionEvent که نشان می‌دهد اشاره‌گری غیر از اشاره‌گر اول بالا رفته است (یعنی تماس با صفحه نمایش دستگاه را رها کرده است).
  • FLAG_CANCELED : ثابت MotionEvent که نشان می‌دهد بالا رفتن اشاره‌گر باعث یک رویداد لمس غیرعمدی شده است. به رویدادهای ACTION_POINTER_UP و ACTION_CANCEL در اندروید ۱۳ (سطح API ۳۳) و بالاتر اضافه شده است.

Collections that contain this guide

این راهنما بخشی از این مجموعه‌های راهنمای سریعِ برگزیده است که اهداف گسترده‌تر توسعه اندروید را پوشش می‌دهد:

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

Have questions or feedback

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