ব্যবহারকারীরা যখন স্টাইলাস ব্যবহার করে আঁকেন, লেখেন বা কোনো অ্যাপের সাথে ইন্টারঅ্যাক্ট করেন, তখন তারা মাঝে মাঝে হাতের তালু দিয়ে স্ক্রিন স্পর্শ করে ফেলেন। সিস্টেমটি এই স্পর্শটিকে একটি অনিচ্ছাকৃত তালুর স্পর্শ হিসেবে শনাক্ত করে বাতিল করার আগেই, এই টাচ ইভেন্টটি আপনার অ্যাপে রিপোর্ট করা হতে পারে।
আপনার অ্যাপকে অবশ্যই অপ্রয়োজনীয় টাচ ইভেন্টগুলো শনাক্ত করে উপেক্ষা করতে হবে। অ্যান্ড্রয়েড ১৩ এবং এর পরবর্তী এপিআই লেভেলগুলো অন্য সব এপিআই লেভেলের চেয়ে ভিন্নভাবে পাম টাচ নির্দেশ করে।
ফলাফল
আপনার অ্যাপটি অ্যান্ড্রয়েড ১৩ এবং তার উচ্চতর এপিআই লেভেলে মাল্টি-পয়েন্টার ইভেন্টের জন্য এবং সকল এপিআই লেভেলে সিঙ্গেল-পয়েন্টার ইভেন্টের জন্য পাম টাচ শনাক্ত ও প্রত্যাখ্যান করতে সক্ষম।
সংস্করণ সামঞ্জস্যতা
মাল্টি-পয়েন্টার ইভেন্টের জন্য আপনার প্রোজেক্টের minSDK এপিআই লেভেল ৩৩-এ সেট করুন। সিঙ্গেল-পয়েন্টার ইভেন্ট এপিআই লেভেলগুলোতে সমর্থিত।
নির্ভরশীলতা
কিছুই না।
হাতের স্পর্শ শনাক্ত করুন এবং উপেক্ষা করুন
অ্যান্ড্রয়েড আপনার অ্যাপে একটি MotionEvent অবজেক্ট প্রেরণ করার মাধ্যমে পাম টাচ বাতিল করে।
আপনার অ্যাপে পাঠানো
MotionEventঅবজেক্টগুলো পরীক্ষা করুন। ইভেন্টের প্রোপার্টি (অ্যাকশন এবং ফ্ল্যাগ) নির্ধারণ করতেMotionEventAPI ব্যবহার করুন:- সিঙ্গেল-পয়েন্টার ইভেন্ট —
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ইভেন্টগুলিতে এটি যুক্ত করা হয়েছে।
যে সংগ্রহগুলিতে এই নির্দেশিকাটি রয়েছে
এই নির্দেশিকাটি বিশেষভাবে নির্বাচিত কুইক গাইড সংকলনগুলোর একটি অংশ, যা অ্যান্ড্রয়েড ডেভেলপমেন্টের বৃহত্তর লক্ষ্যগুলো পূরণ করে:
