স্টাইলাস পাম রিজেকশন

ফাইভ স্টার রেটিং আইকন

স্টাইলাস অসাধারণ প্রোডাক্টিভ ও ক্রিয়েটিভ টুল হতে পারে। কিন্তু ব্যবহারকারীরা স্টাইলাস ব্যবহার করে কোনও অ্যাপে ড্র, রাইট বা ইন্টার‍্যাক্ট করার সময়, কখনও কখনও তাদের হাতের তালু দিয়ে স্ক্রিন স্পর্শ করেন। সিস্টেমের শনাক্ত করা এবং দুর্ঘটনাবশত পাম টাচ হিসেবে ইভেন্ট বাতিল করার আগে আপনার অ্যাপে টাচ ইভেন্ট সম্পর্কে রিপোর্ট করা হতে পারে।

পেশাদার পদ্ধতি

আপনার অ্যাপকে অবশ্যই অপ্রাসঙ্গিক টাচ ইভেন্ট শনাক্ত করতে হবে এবং সেগুলি উপেক্ষা করতে হবে। Jetpack Compose-এ, আপনি PointerEvent থেকে অন্তর্নিহিত Android MotionEvent অ্যাক্সেস করতে পারবেন। ACTION_CANCEL-এর জন্য MotionEvent চেক করুন, যা ইঙ্গিত করে যে জেসচার বন্ধ করা উচিত এবং হয়ত রোল ব্যাক করতে হবে। Android 13 (API লেভেল 33) ও এর পরের যেকোনও ভার্সনে, ACTION_CANCEL ও ACTION_POINTER_UP ইভেন্টে FLAG_CANCELED ফ্ল্যাগ চেক করুন, যা শক্তিশালী সিগন্যাল প্রদান করে যে টাচটি অনিচ্ছাকৃত ছিল, যেমন হাতের তালু দিয়ে টাচ করা।

উপাদান

  • Modifier.pointerInput(): পয়েন্টার ইনপুট প্রসেস করার জন্য কম্পোজ মডিফায়ার ব্যবহার করা হয়।
  • PointerEvent: Compose-এ একটি পয়েন্টার ইভেন্টকে বোঝায়, যার মধ্যে এক বা একাধিক পরিবর্তন থাকে।
  • PointerEvent.motionEvent: এক্সটেনশন প্রপার্টি যা অন্তর্নিহিত Android MotionEvent-এ অ্যাক্সেস প্রদান করে (নাল হতে পারে)।
  • MotionEvent: টাচ ও মুভমেন্ট ইভেন্টকে বোঝায়। কোনও ইভেন্ট উপেক্ষা করা উচিত কিনা তা নির্ধারণ করার জন্য প্রয়োজনীয় তথ্য থাকে।
  • ACTION_CANCEL: MotionEvent কনস্ট্যান্ট যা ইঙ্গিত করে যে জেসচার বাতিল করা হয়েছে; জেসচার বন্ধ হয়ে যাবে এবং রোলব্যাক করার প্রয়োজন হতে পারে।
  • ACTION_POINTER_UP: MotionEvent এমন কনস্ট্যান্ট যা প্রথম পয়েন্টার ছাড়া অন্য কোনও পয়েন্টার উপরের দিকে চলে গেছে (অর্থাৎ, ডিভাইস স্ক্রিনের সাথে যোগাযোগ বিচ্ছিন্ন হয়ে গেছে) তা নির্দেশ করে।
  • FLAG_CANCELED: MotionEvent কনস্ট্যান্ট যা ইঙ্গিত করে যে পয়েন্টার উপরের দিকে যাওয়ার ফলে অনিচ্ছাকৃত টাচ ইভেন্ট হয়েছে। Android 13 (API লেভেল 33) ও এর পরের যেকোনও ভার্সনে ACTION_POINTER_UP ও ACTION_CANCEL ইভেন্টে যোগ করা হয়েছে।

ধাপ

আপনার অ্যাপে পাঠানো MotionEvent অবজেক্ট পরীক্ষা করুন। ইভেন্টের বৈশিষ্ট্য নির্ধারণ করতে MotionEvent API ব্যবহার করুন:

  • সিঙ্গেল-পয়েন্টার ইভেন্ট — ACTION_CANCEL চেক করুন, যা ইঙ্গিত করে যে জেসচার বন্ধ হয়ে যাওয়া উচিত। Android 13 ও এর পরের যেকোনও ভার্সনে, টাচটি অনিচ্ছাকৃত ছিল কিনা তা কনফার্ম করতে FLAG_CANCELED-ও চেক করুন।
  • মাল্টি-পয়েন্টার ইভেন্ট — Android 13 ও এর পরবর্তী যেকোনও ভার্সনে, অনিচ্ছাকৃত স্পর্শ শনাক্ত করতে ACTION_POINTER_UP ও FLAG_CANCELED চেক করুন।

জেসচার বন্ধ করে এবং কোনও অস্থায়ী পরিবর্তন রোল ব্যাক করে এইসব ইভেন্টের উত্তর দিন।

১. মোশন ইভেন্ট অবজেক্ট সংগ্রহ করা

Composable-এ পয়েন্টার ইনপুট প্রসেস করতে 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 চেক করুন, যা সব API লেভেলে একটি সিঙ্গেল-পয়েন্টার ইভেন্ট নির্দেশ করে। 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.
                                }
                            }
                        }
                    }
                }
            }
    )

৩. জেসচার আগের অবস্থায় ফিরিয়ে আনা

আপনি পাম টাচ শনাক্ত করার পরে, জেসচারের অন-স্ক্রিন এফেক্ট আনডু করতে পারবেন।

আপনার অ্যাপকে অবশ্যই ব্যবহারকারীর অ্যাকশনের ইতিহাস রাখতে হবে যাতে হাতের তালু স্পর্শের মতো অনাকাঙ্ক্ষিত ইনপুট বাতিল করা যায়। উদাহরণের জন্য, Android অ্যাপে স্টাইলাস সাপোর্ট উন্নত করা কোডল্যাবে প্রাথমিক ড্রয়িং অ্যাপ প্রয়োগ করা দেখুন।

ফলাফল

আপনার অ্যাপ এখন Android 13 ও এর পরের যেকোনও API লেভেলে মাল্টি-পয়েন্টার ইভেন্টের জন্য এবং সব API লেভেলে সিঙ্গেল-পয়েন্টার ইভেন্টের জন্য পাম টাচ শনাক্ত করতে ও বাতিল করতে পারবে।

অতিরিক্ত রিসোর্স

আরও তথ্যের জন্য, নিম্নলিখিত বিষয়গুলি দেখুন: