লেখনী পাম স্পর্শ প্রত্যাখ্যান

ব্যবহারকারীরা যখন স্টাইলাস ব্যবহার করে আঁকেন, লেখেন বা কোনো অ্যাপের সাথে ইন্টারঅ্যাক্ট করেন, তখন তারা মাঝে মাঝে হাতের তালু দিয়ে স্ক্রিন স্পর্শ করে ফেলেন। সিস্টেমটি এই স্পর্শটিকে একটি অনিচ্ছাকৃত তালুর স্পর্শ হিসেবে শনাক্ত করে বাতিল করার আগেই, এই টাচ ইভেন্টটি আপনার অ্যাপে রিপোর্ট করা হতে পারে।

আপনার অ্যাপকে অবশ্যই অপ্রয়োজনীয় টাচ ইভেন্টগুলো শনাক্ত করে উপেক্ষা করতে হবে। অ্যান্ড্রয়েড ১৩ এবং এর পরবর্তী এপিআই লেভেলগুলো অন্য সব এপিআই লেভেলের চেয়ে ভিন্নভাবে পাম টাচ নির্দেশ করে।

ফলাফল

আপনার অ্যাপটি অ্যান্ড্রয়েড ১৩ এবং তার উচ্চতর এপিআই লেভেলে মাল্টি-পয়েন্টার ইভেন্টের জন্য এবং সকল এপিআই লেভেলে সিঙ্গেল-পয়েন্টার ইভেন্টের জন্য পাম টাচ শনাক্ত ও প্রত্যাখ্যান করতে সক্ষম।

সংস্করণ সামঞ্জস্যতা

মাল্টি-পয়েন্টার ইভেন্টের জন্য আপনার প্রোজেক্টের minSDK এপিআই লেভেল ৩৩-এ সেট করুন। সিঙ্গেল-পয়েন্টার ইভেন্ট এপিআই লেভেলগুলোতে সমর্থিত।

নির্ভরশীলতা

কিছুই না।

হাতের স্পর্শ শনাক্ত করুন এবং উপেক্ষা করুন

অ্যান্ড্রয়েড আপনার অ্যাপে একটি MotionEvent অবজেক্ট প্রেরণ করার মাধ্যমে পাম টাচ বাতিল করে।

  • আপনার অ্যাপে পাঠানো MotionEvent অবজেক্টগুলো পরীক্ষা করুন। ইভেন্টের প্রোপার্টি (অ্যাকশন এবং ফ্ল্যাগ) নির্ধারণ করতে MotionEvent API ব্যবহার করুন:

    • সিঙ্গেল-পয়েন্টার ইভেন্টACTION_CANCEL আছে কিনা তা পরীক্ষা করুন। অ্যান্ড্রয়েড ১৩ এবং তার পরবর্তী সংস্করণগুলোতে FLAG_CANCELED কিনা তাও পরীক্ষা করুন।
    • মাল্টি-পয়েন্টার ইভেন্ট — অ্যান্ড্রয়েড ১৩ এবং তার পরবর্তী সংস্করণগুলোতে ACTION_POINTER_UP এবং FLAG_CANCELED ইভেন্টগুলো পরীক্ষা করুন।
  • যেসব মোশন ইভেন্টগুলিতে ACTION_CANCEL এবং ACTION_POINTER_UP / FLAG_CANCELED প্রপার্টি রয়েছে, সেগুলিকে উপেক্ষা করুন।

১. গতি ইভেন্ট অবজেক্টগুলি সংগ্রহ করুন

আপনার অ্যাপে একটি 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.
});

২. ইভেন্টের অ্যাকশন এবং ফ্ল্যাগগুলো নির্ধারণ করুন

ACTION_CANCEL চেক করুন, যা সমস্ত API লেভেলে একটি সিঙ্গেল-পয়েন্টার ইভেন্ট নির্দেশ করে। Android 13 এবং তার পরবর্তী সংস্করণগুলিতে, FLAG_CANCELED. এর জন্য ACTION_POINTER_UP চেক করুন।

কোটলিন

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;
});

৩. অঙ্গভঙ্গিটি পূর্বাবস্থায় ফিরিয়ে আনুন।

পাম টাচ শনাক্ত করার পর, আপনি সেই জেসচারের অনস্ক্রিন প্রভাবগুলো পূর্বাবস্থায় ফিরিয়ে আনতে পারবেন।

আপনার অ্যাপকে অবশ্যই ব্যবহারকারীর কার্যকলাপের ইতিহাস রাখতে হবে, যাতে হাতের তালুতে স্পর্শের মতো অনিচ্ছাকৃত ইনপুটগুলো পূর্বাবস্থায় ফিরিয়ে আনা যায়। কীভাবে ইতিহাস সংরক্ষণ করতে হয় তার একটি উদাহরণের জন্য, "Enhance stylus support in an Android app" কোডল্যাবের "Implement a basic drawing app" অংশটি দেখুন।

মূল বিষয়গুলো

  • MotionEvent : স্পর্শ এবং নড়াচড়ার ইভেন্টকে বোঝায়। কোনো ইভেন্টকে অগ্রাহ্য করা হবে কি না, তা নির্ধারণ করার জন্য প্রয়োজনীয় তথ্য এতে থাকে।
  • OnTouchListener#onTouch() : MotionEvent অবজেক্ট গ্রহণ করে।
  • MotionEvent#getActionMasked() : কোনো মোশন ইভেন্টের সাথে সংশ্লিষ্ট অ্যাকশনটি রিটার্ন করে।
  • ACTION_CANCEL : MotionEvent কনস্ট্যান্ট যা নির্দেশ করে যে কোনো জেসচার পূর্বাবস্থায় ফিরিয়ে আনা প্রয়োজন।
  • ACTION_POINTER_UP : MotionEvent কনস্ট্যান্ট যা নির্দেশ করে যে প্রথম পয়েন্টারটি ছাড়া অন্য কোনো পয়েন্টার উপরে উঠে গেছে (অর্থাৎ, ডিভাইস স্ক্রিনের সাথে সংযোগ বিচ্ছিন্ন করেছে)।
  • FLAG_CANCELED : MotionEvent কনস্ট্যান্ট যা নির্দেশ করে যে পয়েন্টারটি উপরে ওঠার কারণে একটি অনিচ্ছাকৃত টাচ ইভেন্ট ঘটেছে। Android 13 (API লেভেল 33) এবং তার পরবর্তী সংস্করণগুলিতে ACTION_POINTER_UP এবং ACTION_CANCEL ইভেন্টগুলিতে এটি যুক্ত করা হয়েছে।

যে সংগ্রহগুলিতে এই নির্দেশিকাটি রয়েছে

এই নির্দেশিকাটি বিশেষভাবে নির্বাচিত কুইক গাইড সংকলনগুলোর একটি অংশ, যা অ্যান্ড্রয়েড ডেভেলপমেন্টের বৃহত্তর লক্ষ্যগুলো পূরণ করে:

ট্যাবলেট, ফোল্ডেবল এবং ক্রোমওএস ডিভাইসে উন্নত ব্যবহারকারী অভিজ্ঞতা প্রদানের জন্য আপনার অ্যাপটি সক্ষম করুন।

কোনো প্রশ্ন বা মতামত থাকলে

আমাদের প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী পেজে গিয়ে সংক্ষিপ্ত নির্দেশিকাগুলো সম্পর্কে জানুন অথবা আমাদের সাথে যোগাযোগ করে আপনার মতামত জানান।