অ্যান্ড্রয়েড স্টাইলাস-ভিত্তিক ডিজিটাইজার ট্যাবলেট সহ বিভিন্ন টাচ স্ক্রিন এবং টাচ প্যাড সমর্থন করে।
টাচ স্ক্রিন হল টাচ ডিভাইস যা একটি ডিসপ্লের সাথে যুক্ত থাকে যাতে ব্যবহারকারীর স্ক্রিনে আইটেমগুলিকে সরাসরি ম্যানিপুলেট করার ছাপ থাকে।
টাচ প্যাড হল এমন টাচ ডিভাইস যা ডিসপ্লের সাথে যুক্ত নয়, যেমন ডিজিটাইজার ট্যাবলেট। টাচ প্যাডগুলি সাধারণত নির্দেশ করার জন্য বা পরোক্ষ পজিশনিং বা একটি ব্যবহারকারী ইন্টারফেসের অঙ্গভঙ্গি-ভিত্তিক নিয়ন্ত্রণের জন্য ব্যবহৃত হয়।
টাচ ডিভাইসে এমন বোতাম থাকতে পারে যার কার্যকারিতা মাউস বোতামের মতো।
স্পর্শ ডিভাইসগুলি মাঝে মাঝে অন্তর্নিহিত স্পর্শ সেন্সর প্রযুক্তির উপর নির্ভর করে আঙুল বা স্টাইলাসের মতো বিভিন্ন সরঞ্জাম ব্যবহার করে ম্যানিপুলেট করা যেতে পারে।
টাচ ডিভাইসগুলি কখনও কখনও ভার্চুয়াল কীগুলি প্রয়োগ করতে ব্যবহৃত হয়। উদাহরণস্বরূপ, কিছু অ্যান্ড্রয়েড ডিভাইসে, টাচ স্ক্রিন সেন্সর এলাকাটি ডিসপ্লের প্রান্তের বাইরে প্রসারিত হয় এবং একটি স্পর্শ সংবেদনশীল কী প্যাডের অংশ হিসাবে দ্বৈত উদ্দেশ্য পরিবেশন করে।
টাচ ডিভাইসের বিশাল বৈচিত্র্যের কারণে, অ্যান্ড্রয়েড প্রতিটি ডিভাইসের বৈশিষ্ট্য এবং পছন্দসই আচরণ বর্ণনা করতে প্রচুর সংখ্যক কনফিগারেশন বৈশিষ্ট্যের উপর নির্ভর করে।
স্পর্শ ডিভাইস শ্রেণীবিভাগ
একটি ইনপুট ডিভাইস একটি মাল্টি-টাচ ডিভাইস হিসাবে শ্রেণীবদ্ধ করা হয় যদি নিম্নলিখিত দুটি শর্ত থাকে:
- ইনপুট ডিভাইস
ABS_MT_POSITION_XএবংABS_MT_POSITION_Yপরম অক্ষের উপস্থিতি রিপোর্ট করে। - ইনপুট ডিভাইসে কোনো গেমপ্যাড বোতাম নেই। এই শর্তটি নির্দিষ্ট গেমপ্যাডগুলির সাথে একটি অস্পষ্টতার সমাধান করে যা MT অক্ষগুলিকে ওভারল্যাপ করে এমন কোডগুলির সাথে অক্ষগুলি রিপোর্ট করে৷
একটি ইনপুট ডিভাইস একটি একক-স্পর্শ ডিভাইস হিসাবে শ্রেণীবদ্ধ করা হয় যদি নিম্নলিখিত দুটি শর্ত থাকে:
- ইনপুট ডিভাইস একটি মাল্টি-টাচ ডিভাইস হিসাবে শ্রেণীবদ্ধ করা হয় না. একটি ইনপুট ডিভাইস হয় একক-টাচ ডিভাইস বা মাল্টি-টাচ ডিভাইস হিসাবে শ্রেণীবদ্ধ করা হয়, উভয়ই নয়।
- ইনপুট ডিভাইসটি
ABS_XএবংABS_Yপরম অক্ষের উপস্থিতি এবংBTN_TOUCHকী কোডের উপস্থিতি রিপোর্ট করে।
যখন একটি ইনপুট ডিভাইস একটি স্পর্শ ডিভাইস হিসাবে শ্রেণীবদ্ধ করা হয়, ভার্চুয়াল কীগুলির উপস্থিতি ডিভাইসের জন্য ভার্চুয়াল কী মানচিত্র ফাইল লোড করার চেষ্টা করে নির্ধারিত হয়। যদি একটি ভার্চুয়াল কী মানচিত্র উপলব্ধ থাকে, তাহলে ডিভাইসের জন্য কী বিন্যাস ফাইলটিও লোড করা হয়। এই ফাইলগুলির অবস্থান এবং বিন্যাস সম্পর্কে তথ্যের জন্য [ভার্চুয়াল কী মানচিত্র ফাইল] (#ভার্চুয়াল-কী-ম্যাপ-ফাইলস) দেখুন।
এরপরে, সিস্টেম টাচ ডিভাইসের জন্য ইনপুট ডিভাইস কনফিগারেশন ফাইল লোড করে।
সমস্ত বিল্ট-ইন টাচ ডিভাইসে ইনপুট ডিভাইস কনফিগারেশন ফাইল থাকা উচিত। যদি কোনও ইনপুট ডিভাইস কনফিগারেশন ফাইল উপস্থিত না থাকে, তবে সিস্টেমটি একটি ডিফল্ট কনফিগারেশন বেছে নেয় যা সাধারণ-উদ্দেশ্যের টাচ পেরিফেরাল যেমন এক্সটার্নাল ইউএসবি বা ব্লুটুথ HID টাচ স্ক্রিন বা টাচ প্যাডগুলির জন্য উপযুক্ত। এই ডিফল্টগুলি বিল্ট-ইন টাচ স্ক্রিনের জন্য ডিজাইন করা হয়নি এবং এর ফলে ভুল আচরণ হতে পারে।
ইনপুট ডিভাইস কনফিগারেশন লোড হওয়ার পরে, সিস্টেম ইনপুট ডিভাইসটিকে একটি টাচ স্ক্রিন , টাচ প্যাড বা পয়েন্টার ডিভাইস হিসাবে শ্রেণীবদ্ধ করে।
- একটি টাচ স্ক্রিন ডিভাইস পর্দায় বস্তুর সরাসরি ম্যানিপুলেশন জন্য ব্যবহার করা হয়. ব্যবহারকারী সরাসরি স্ক্রীন স্পর্শ করে, তাই বস্তুগুলিকে ম্যানিপুলেট করা হচ্ছে তা নির্দেশ করার জন্য সিস্টেমের কোন অতিরিক্ত সুবিধার প্রয়োজন হয় না।
- একটি টাচ প্যাড ডিভাইস একটি প্রদত্ত সেন্সর এলাকায় স্পর্শ সম্পর্কে একটি অ্যাপে নিখুঁত অবস্থানের তথ্য প্রদান করতে ব্যবহৃত হয়। এটি ডিজিটাইজার ট্যাবলেটের জন্য উপযোগী হতে পারে।
- একটি পয়েন্টার ডিভাইস একটি কার্সার ব্যবহার করে পর্দায় বস্তুর পরোক্ষ ম্যানিপুলেশন জন্য ব্যবহার করা হয়. আঙ্গুলগুলিকে মাল্টি-টাচ পয়েন্টার অঙ্গভঙ্গি হিসাবে ব্যাখ্যা করা হয়। অন্যান্য সরঞ্জাম, যেমন স্টাইলাস, পরম অবস্থান ব্যবহার করে ব্যাখ্যা করা হয়। আরও তথ্যের জন্য পরোক্ষ মাল্টি-টাচ পয়েন্টার অঙ্গভঙ্গি দেখুন।
নিম্নলিখিত নিয়মগুলি ইনপুট ডিভাইসটিকে একটি টাচ স্ক্রিন, টাচ প্যাড বা পয়েন্টার ডিভাইস হিসাবে শ্রেণীবদ্ধ করতে ব্যবহৃত হয়।
- যদি
touch.deviceTypeপ্রপার্টি সেট করা থাকে, তাহলে ডিভাইসের ধরনটি নির্দেশিত হিসাবে সেট করা হয়। - যদি ইনপুট ডিভাইসটি
INPUT_PROP_DIRECTইনপুট বৈশিষ্ট্যের উপস্থিতি রিপোর্ট করে (EVIOCGPROPioctl এর মাধ্যমে), তাহলে ডিভাইসের ধরনটি স্পর্শ পর্দায় সেট করা হয়। এই শর্তটি অনুমান করে যে সরাসরি ইনপুট টাচ ডিভাইসগুলি একটি ডিসপ্লেতে সংযুক্ত রয়েছে যা সংযুক্ত রয়েছে। - যদি ইনপুট ডিভাইসটি
INPUT_PROP_POINTERইনপুট বৈশিষ্ট্যের উপস্থিতি রিপোর্ট করে (EVIOCGPROPioctl এর মাধ্যমে), তাহলে ডিভাইসের ধরন পয়েন্টারে সেট করা হয়। - যদি ইনপুট ডিভাইসটি
REL_XবাREL_Yআপেক্ষিক অক্ষের উপস্থিতি রিপোর্ট করে, তাহলে ডিভাইসের ধরনটি স্পর্শ প্যাডে সেট করা হয়। এই অবস্থাটি ইনপুট ডিভাইসগুলির জন্য একটি অস্পষ্টতার সমাধান করে যাতে একটি মাউস এবং একটি টাচ প্যাড উভয়ই থাকে। এই ক্ষেত্রে, টাচ প্যাড পয়েন্টার নিয়ন্ত্রণ করতে ব্যবহার করা হয় না কারণ মাউস ইতিমধ্যে এটি নিয়ন্ত্রণ করে। - অন্যথায়, ডিভাইসের ধরন পয়েন্টারে সেট করা আছে। এই ডিফল্ট নিশ্চিত করে যে টাচ প্যাড যা অন্য কোন বিশেষ উদ্দেশ্যে মনোনীত করা হয়নি পয়েন্টার নিয়ন্ত্রণ করে।
বোতাম
বোতামগুলি হল ঐচ্ছিক নিয়ন্ত্রণ যা অ্যাপগুলি অতিরিক্ত ফাংশন সম্পাদন করতে ব্যবহার করতে পারে৷ টাচ ডিভাইসের বোতামগুলি মাউস বোতামের মতোই আচরণ করে এবং প্রধানত পয়েন্টার টাইপ টাচ ডিভাইস বা স্টাইলাসের সাথে ব্যবহার করা হয়।
নিম্নলিখিত বোতামগুলি সমর্থিত:
-
BTN_LEFT:MotionEvent.BUTTON_PRIMARYএ ম্যাপ করা হয়েছে৷BUTTON_PRIMARY৷ -
BTN_RIGHT:MotionEvent.BUTTON_SECONDARYএ ম্যাপ করা হয়েছে৷BUTTON_SECONDARY৷ -
BTN_MIDDLE:MotionEvent.BUTTON_MIDDLEএ ম্যাপ করা হয়েছে৷BUTTON_MIDDLE৷ -
BTN_BACKএবংBTN_SIDE:MotionEvent.BUTTON_BACKএ ম্যাপ করা হয়েছে৷BUTTON_BACK৷ এই বোতাম টিপলে কী কোডKeyEvent.KEYCODE_BACKএর সাথে একটি কী প্রেসও সংশ্লেষিত হয়। -
BTN_FORWARDএবংBTN_EXTRA:MotionEvent.BUTTON_FORWARDএ ম্যাপ করা হয়েছে৷BUTTON_FORWARD৷ এই বোতাম টিপলে কী কোডKeyEvent.KEYCODE_FORWARDসহ একটি কী প্রেসও সংশ্লেষিত হয়। -
BTN_STYLUS:MotionEvent.BUTTON_SECONDARYএ ম্যাপ করা হয়েছে৷BUTTON_SECONDARY৷ -
BTN_STYLUS2:MotionEvent.BUTTON_TERTIARYএ ম্যাপ করা হয়েছে৷BUTTON_TERTIARY৷
টুল এবং টুলের ধরন
একটি টুল হল একটি আঙুল, লেখনী বা অন্যান্য যন্ত্রপাতি যা স্পর্শ ডিভাইসের সাথে যোগাযোগ করতে ব্যবহৃত হয়। কিছু স্পর্শ ডিভাইস বিভিন্ন ধরনের টুলের মধ্যে পার্থক্য করতে পারে।
Android এর অন্য কোথাও, MotionEvent API-এর মতো, একটি টুলকে প্রায়ই একটি পয়েন্টার হিসাবে উল্লেখ করা হয়।
নিম্নলিখিত সরঞ্জাম প্রকারগুলি সমর্থিত:
-
BTN_TOOL_FINGERএবংMT_TOOL_FINGER:MotionEvent.TOOL_TYPE_FINGERএ ম্যাপ করা হয়েছে। -
BTN_TOOL_PENএবংMT_TOOL_PEN:MotionEvent.TOOL_TYPE_STYLUSএ ম্যাপ করা হয়েছে। -
BTN_TOOL_RUBBER:MotionEvent.TOOL_TYPE_ERASERএ ম্যাপ করা হয়েছে। -
BTN_TOOL_BRUSH:MotionEvent.TOOL_TYPE_STYLUSএ ম্যাপ করা হয়েছে। -
BTN_TOOL_PENCIL:MotionEvent.TOOL_TYPE_STYLUSএ ম্যাপ করা হয়েছে। -
BTN_TOOL_AIRBRUSH:MotionEvent.TOOL_TYPE_STYLUSএ ম্যাপ করা হয়েছে। -
BTN_TOOL_MOUSE:MotionEvent.TOOL_TYPE_MOUSEএ ম্যাপ করা হয়েছে। -
BTN_TOOL_LENS:MotionEvent.TOOL_TYPE_MOUSEএ ম্যাপ করা হয়েছে। -
BTN_TOOL_DOUBLETAP,BTN_TOOL_TRIPLETAP, এবংBTN_TOOL_QUADTAP:MotionEvent.TOOL_TYPE_FINGERএ ম্যাপ করা হয়েছে।
হভারিং বনাম স্পর্শ সরঞ্জাম
টুলগুলি হয় স্পর্শ ডিভাইসের সংস্পর্শে বা পরিসরে এবং এটির উপরে ঘোরাফেরা করতে পারে। সমস্ত স্পর্শ ডিভাইস স্পর্শ ডিভাইসের উপরে ঘোরাফেরা করা একটি টুলের উপস্থিতি অনুভব করতে পারে না। যেগুলি করে, যেমন RF-ভিত্তিক স্টাইলাস ডিজিটাইজার, প্রায়শই সনাক্ত করতে পারে যখন টুলটি ডিজিটাইজারের সীমিত পরিসরের মধ্যে থাকে।
InputReader কম্পোনেন্ট টাচিং টুলকে হোভারিং টুল থেকে আলাদা করে। একইভাবে, স্পর্শ করার সরঞ্জাম এবং হোভারিং সরঞ্জামগুলি বিভিন্ন উপায়ে অ্যাপগুলিতে রিপোর্ট করা হয়।
MotionEvent.ACTION_DOWN , MotionEvent.ACTION_MOVE , MotionEvent.ACTION_DOWN , MotionEvent.ACTION_POINTER_DOWN এবং MotionEvent.ACTION_POINTER_UP ব্যবহার করে স্পর্শ করার সরঞ্জামগুলিকে স্পর্শ ইভেন্ট হিসাবে অ্যাপগুলিতে রিপোর্ট করা হয়।
MotionEvent.ACTION_HOVER_ENTER , MotionEvent.ACTION_HOVER_MOVE , এবং MotionEvent.ACTION_HOVER_EXIT ব্যবহার করে হোভারিং সরঞ্জামগুলিকে জেনেরিক মোশন ইভেন্ট হিসাবে অ্যাপগুলিতে রিপোর্ট করা হয়৷
স্পর্শ ডিভাইস ড্রাইভার প্রয়োজনীয়তা
- টাচ ডিভাইস ড্রাইভারদের শুধুমাত্র অক্ষ এবং বোতামগুলির জন্য অক্ষ এবং কী কোডগুলি নিবন্ধন করা উচিত যা তারা সমর্থন করে। অসমর্থিত অক্ষ বা কী কোড নিবন্ধন করা ডিভাইসের শ্রেণিবিন্যাস অ্যালগরিদমকে বিভ্রান্ত করতে পারে বা সিস্টেমটিকে ভুলভাবে ডিভাইসের ক্ষমতা সনাক্ত করতে পারে। উদাহরণস্বরূপ, যদি ডিভাইসটি
BTN_TOUCHকী কোড রিপোর্ট করে, তাহলে সিস্টেমটি অনুমান করে যেBTN_TOUCHসর্বদা ব্যবহৃত হয় তা নির্দেশ করতে যে টুলটি স্ক্রীন স্পর্শ করছে কিনা। অতএব,BTN_TOUCHব্যবহার করা উচিত নয় যে টুলটি শুধুমাত্র পরিসরে এবং ঘোরাফেরা করছে। - একক-টাচ ডিভাইসগুলি নিম্নলিখিত লিনাক্স ইনপুট ইভেন্টগুলি ব্যবহার করে:
-
ABS_X: (প্রয়োজনীয়) টুলের X স্থানাঙ্ক রিপোর্ট করে। -
ABS_Y: (প্রয়োজনীয়) টুলের Y স্থানাঙ্ক রিপোর্ট করে। -
ABS_PRESSURE: (ঐচ্ছিক) টুলের ডগায় প্রয়োগ করা শারীরিক চাপ বা স্পর্শ যোগাযোগের সংকেত শক্তির প্রতিবেদন করে। -
ABS_TOOL_WIDTH: (ঐচ্ছিক) স্পর্শ যোগাযোগের ক্রস-বিভাগীয় এলাকা বা প্রস্থ বা টুলের নিজেই রিপোর্ট করে। -
ABS_DISTANCE: (ঐচ্ছিক) স্পর্শ ডিভাইসের পৃষ্ঠ থেকে টুলের দূরত্ব রিপোর্ট করে। -
ABS_TILT_X: (ঐচ্ছিক) X অক্ষ বরাবর স্পর্শ ডিভাইসের পৃষ্ঠ থেকে টুলের কাত রিপোর্ট করে। -
ABS_TILT_Y: (ঐচ্ছিক) Y অক্ষ বরাবর স্পর্শ ডিভাইসের পৃষ্ঠ থেকে টুলের কাত রিপোর্ট করে। -
BTN_TOUCH: (প্রয়োজনীয়) সরঞ্জামটি ডিভাইসটিকে স্পর্শ করছে কিনা তা নির্দেশ করে৷ -
BTN_LEFT,BTN_RIGHT,BTN_MIDDLE,BTN_BACK,BTN_SIDE,BTN_FORWARD,BTN_EXTRA,BTN_STYLUS,BTN_STYLUS2: (ঐচ্ছিক) রিপোর্ট বোতামের অবস্থা। -
BTN_TOOL_FINGER,BTN_TOOL_PEN,BTN_TOOL_RUBBER,BTN_TOOL_BRUSH,BTN_TOOL_PENCIL,BTN_TOOL_AIRBRUSH,BTN_TOOL_MOUSE, BTN_TOOL_LENS ,BTN_TOOL_LENS,BTN_TOOL_DOUBLETAPBTN_TOOL_TRIPLETAP,BTN_TOOL_QUADTAP: (ঐচ্ছিক) টুল টাইপ রিপোর্ট করে।
-
- মাল্টি-টাচ ডিভাইসগুলি নিম্নলিখিত লিনাক্স ইনপুট ইভেন্টগুলি ব্যবহার করে:
-
ABS_MT_POSITION_X: (প্রয়োজনীয়) টুলের X স্থানাঙ্ক রিপোর্ট করে। -
ABS_MT_POSITION_Y: (প্রয়োজনীয়) টুলের Y স্থানাঙ্ক রিপোর্ট করে। -
ABS_MT_PRESSURE: (ঐচ্ছিক) টুলের ডগায় প্রয়োগ করা শারীরিক চাপ বা স্পর্শ যোগাযোগের সংকেত শক্তি রিপোর্ট করে। -
ABS_MT_TOUCH_MAJOR: (ঐচ্ছিক) স্পর্শ যোগাযোগের ক্রস-বিভাগীয় এলাকা বা স্পর্শ পরিচিতির দীর্ঘ মাত্রার দৈর্ঘ্য রিপোর্ট করে। -
ABS_MT_TOUCH_MINOR: (ঐচ্ছিক) স্পর্শ যোগাযোগের ছোট মাত্রার দৈর্ঘ্য রিপোর্ট করে। যদিABS_MT_TOUCH_MAJORএকটি এলাকা পরিমাপের প্রতিবেদন করে তাহলে এই অক্ষটি ব্যবহার করা উচিত নয়৷ -
ABS_MT_WIDTH_MAJOR: (ঐচ্ছিক) নিজেই টুলের ক্রস-বিভাগীয় এলাকা, বা টুলেরই লম্বা মাত্রার দৈর্ঘ্য রিপোর্ট করে। এই অক্ষটি ব্যবহার করবেন না যদি না আপনি নিজেই টুলটির মাত্রা জানেন। -
ABS_MT_WIDTH_MINOR: (ঐচ্ছিক) টুলের ছোট মাত্রার দৈর্ঘ্য রিপোর্ট করে। এই অক্ষটি ব্যবহার করা উচিত নয় যদিABS_MT_WIDTH_MAJORএকটি এলাকা পরিমাপের প্রতিবেদন করে বা যদি টুলের মাত্রা নিজেই অজানা থাকে। -
ABS_MT_ORIENTATION: (ঐচ্ছিক) টুলের ওরিয়েন্টেশন রিপোর্ট করে। -
ABS_MT_DISTANCE: (ঐচ্ছিক) স্পর্শ ডিভাইসের পৃষ্ঠ থেকে টুলের দূরত্ব রিপোর্ট করে। -
ABS_MT_TOOL_TYPE: (ঐচ্ছিক) টুলের প্রকারকেMT_TOOL_FINGERবাMT_TOOL_PENহিসাবে রিপোর্ট করে। -
ABS_MT_TRACKING_ID: (ঐচ্ছিক) টুলের ট্র্যাকিং আইডি রিপোর্ট করে। ট্র্যাকিং আইডি হল একটি নির্বিচারে অ-নেতিবাচক পূর্ণসংখ্যা যা একাধিক টুল সক্রিয় থাকাকালীন প্রতিটি টুলকে স্বাধীনভাবে সনাক্ত করতে এবং ট্র্যাক করতে ব্যবহৃত হয়। উদাহরণস্বরূপ, যখন একাধিক আঙুল ডিভাইসটিকে স্পর্শ করে, তখন প্রতিটি আঙুলকে একটি স্বতন্ত্র ট্র্যাকিং আইডি বরাদ্দ করা উচিত যা যতক্ষণ আঙুলটি যোগাযোগে থাকে ততক্ষণ ব্যবহার করা হয়। ট্র্যাকিং আইডিগুলি পুনরায় ব্যবহার করা যেতে পারে যখন তাদের সম্পর্কিত সরঞ্জামগুলি পরিসীমার বাইরে চলে যায়। -
ABS_MT_SLOT: (ঐচ্ছিক) লিনাক্স মাল্টি-টাচ প্রোটোকল 'B' ব্যবহার করার সময় টুলের স্লট আইডি রিপোর্ট করে। আরো বিস্তারিত জানার জন্য Linux মাল্টি-টাচ প্রোটোকল ডকুমেন্টেশন পড়ুন। -
BTN_TOUCH: (প্রয়োজনীয়) সরঞ্জামটি ডিভাইসটিকে স্পর্শ করছে কিনা তা নির্দেশ করে৷ -
BTN_LEFT,BTN_RIGHT,BTN_MIDDLE,BTN_BACK,BTN_SIDE,BTN_FORWARD,BTN_EXTRA,BTN_STYLUS,BTN_STYLUS2: (ঐচ্ছিক) রিপোর্ট বোতামের অবস্থা। -
BTN_TOOL_FINGER,BTN_TOOL_PEN,BTN_TOOL_RUBBER,BTN_TOOL_BRUSH,BTN_TOOL_PENCIL,BTN_TOOL_AIRBRUSH,BTN_TOOL_MOUSE, BTN_TOOL_LENS ,BTN_TOOL_LENS,BTN_TOOL_DOUBLETAPBTN_TOOL_TRIPLETAP,BTN_TOOL_QUADTAP: (ঐচ্ছিক) টুল টাইপ রিপোর্ট করে।
-
- যদি একক-টাচ এবং মাল্টি-টাচ প্রোটোকল উভয়ের জন্য অক্ষগুলি সংজ্ঞায়িত করা হয়, তবে শুধুমাত্র মাল্টি-টাচ অক্ষগুলি ব্যবহার করা হয় এবং একক-স্পর্শ অক্ষগুলিকে উপেক্ষা করা হয়।
ABS_X,ABS_Y,ABS_MT_POSITION_X, এবংABS_MT_POSITION_Yঅক্ষগুলির সর্বনিম্ন এবং সর্বোচ্চ মানগুলি ডিভাইস-নির্দিষ্ট পৃষ্ঠের ইউনিটগুলিতে ডিভাইসের সক্রিয় এলাকার সীমানা নির্ধারণ করে৷ একটি টাচ স্ক্রিনের ক্ষেত্রে, সক্রিয় এলাকা টাচ ডিভাইসের অংশ বর্ণনা করে যা আসলে ডিসপ্লেকে কভার করে।একটি টাচ স্ক্রিনের জন্য, সিস্টেমটি স্বয়ংক্রিয়ভাবে নিম্নোক্ত গণনা অনুসারে ডিসপ্লে পিক্সেলে টাচ পজিশন পেতে পৃষ্ঠের ইউনিটগুলিতে রিপোর্ট করা স্পর্শ অবস্থানগুলিকে ইন্টারপোলেট করে:
displayX = (x - minX) * displayWidth / (maxX - minX + 1) displayY = (y - minY) * displayHeight / (maxY - minY + 1)একটি টাচ স্ক্রিন রিপোর্ট করা সক্রিয় এলাকার বাইরে স্পর্শের রিপোর্ট করতে পারে।
সক্রিয় এলাকার বাইরে শুরু করা স্পর্শগুলি অ্যাপগুলিতে বিতরণ করা হয় না তবে ভার্চুয়াল কীগুলির জন্য ব্যবহার করা যেতে পারে৷
যে স্পর্শগুলি সক্রিয় এলাকার ভিতরে শুরু হয়, অথবা যেগুলি ডিসপ্লে এলাকায় প্রবেশ করে এবং প্রস্থান করে তা অ্যাপগুলিতে বিতরণ করা হয়। ফলস্বরূপ, যদি একটি স্পর্শ একটি অ্যাপের সীমানার মধ্যে শুরু হয় এবং তারপরে সক্রিয় এলাকার বাইরে চলে যায়, তাহলে অ্যাপটি নেতিবাচক বা প্রদর্শনের সীমার বাইরে ডিসপ্লে স্থানাঙ্ক সহ স্পর্শ ইভেন্টগুলি পেতে পারে। এটি প্রত্যাশিত আচরণ।
একটি স্পর্শ ডিভাইস সক্রিয় এলাকার সীমানায় স্পর্শ স্থানাঙ্ক ক্ল্যাম্প করা উচিত নয়। যদি একটি স্পর্শ সক্রিয় এলাকা থেকে প্রস্থান করে, তাহলে এটি সক্রিয় এলাকার বাইরে বলে রিপোর্ট করা উচিত, বা এটি মোটেও রিপোর্ট করা উচিত নয়।
উদাহরণস্বরূপ, যদি ব্যবহারকারীর আঙুল টাচ স্ক্রিনের উপরের-বাম কোণে স্পর্শ করে, তাহলে এটি (minX, minY) এর একটি স্থানাঙ্ক রিপোর্ট করতে পারে। যদি আঙুলটি সক্রিয় এলাকার বাইরে আরও সরতে থাকে, তাহলে টাচ স্ক্রীনটি হয় minX এবং minY-এর চেয়ে কম উপাদানগুলির সাথে স্থানাঙ্ক রিপোর্ট করা শুরু করবে, যেমন (minX - 2, minY - 3), অথবা এটি সম্পূর্ণভাবে স্পর্শের প্রতিবেদন করা বন্ধ করে দেবে৷ অন্য কথায়, যখন ব্যবহারকারীর আঙুল সক্রিয় এলাকার বাইরে সত্যিই স্পর্শ করে তখন টাচ স্ক্রীন রিপোর্টিং করা উচিত নয় (minX, minY)।
ডিসপ্লে প্রান্তে ক্ল্যাম্পিং টাচ কোঅর্ডিনেট স্ক্রিনের প্রান্তের চারপাশে একটি কৃত্রিম হার্ড বাউন্ডারি তৈরি করে যা ডিসপ্লে এলাকার সীমানায় প্রবেশ বা প্রস্থান করার গতিগুলিকে মসৃণভাবে ট্র্যাক করা থেকে সিস্টেমকে বাধা দেয়।
ABS_PRESSUREবাABS_MT_PRESSUREদ্বারা রিপোর্ট করা মানগুলি, যদি সেগুলি একেবারেই রিপোর্ট করা হয়, টুলটি যখন ডিভাইসটিকে স্পর্শ করে তখন অবশ্যই শূন্য হতে হবে এবং অন্যথায় সরঞ্জামটি ঘোরাফেরা করছে তা নির্দেশ করতে শূন্য হতে হবে।চাপের তথ্য প্রতিবেদন করা ঐচ্ছিক কিন্তু দৃঢ়ভাবে সুপারিশ করা হয়। অ্যাপ্লিকেশানগুলি চাপ-সংবেদনশীল অঙ্কন এবং অন্যান্য প্রভাবগুলি প্রয়োগ করতে চাপের তথ্য ব্যবহার করতে পারে৷
ABS_TOOL_WIDTH,ABS_MT_TOUCH_MAJOR,ABS_MT_TOUCH_MINOR,ABS_MT_WIDTH_MAJOR, বাABS_MT_WIDTH_MINORদ্বারা রিপোর্ট করা মানগুলি যখন টুলটি ডিভাইসটিকে স্পর্শ করে তখন শূন্য হওয়া উচিত এবং অন্যথায় শূন্য হওয়া উচিত, তবে এটির প্রয়োজন নেই৷ উদাহরণস্বরূপ, স্পর্শ ডিভাইসটি আঙুলের স্পর্শ পরিচিতির আকার পরিমাপ করতে সক্ষম হতে পারে কিন্তু স্টাইলাস স্পর্শ পরিচিতি নয়৷রিপোর্টিং আকার তথ্য ঐচ্ছিক কিন্তু দৃঢ়ভাবে সুপারিশ করা হয়. অ্যাপ্লিকেশানগুলি আকার-সংবেদনশীল অঙ্কন এবং অন্যান্য প্রভাবগুলি প্রয়োগ করতে চাপের তথ্য ব্যবহার করতে পারে৷
যখন টুলটি ডিভাইসটিকে স্পর্শ করে তখন
ABS_DISTANCEবাABS_MT_DISTANCEদ্বারা রিপোর্ট করা মানগুলি শূন্যের কাছাকাছি হওয়া উচিত৷ টুলটি সরাসরি যোগাযোগে থাকলেও দূরত্ব শূন্য থেকে যেতে পারে। রিপোর্ট করা সঠিক মানগুলি হার্ডওয়্যার যেভাবে দূরত্ব পরিমাপ করে তার উপর নির্ভর করে।দূরত্বের তথ্য প্রতিবেদন করা ঐচ্ছিক কিন্তু স্টাইলাস ডিভাইসের জন্য সুপারিশ করা হয়।
ABS_TILT_XএবংABS_TILT_Yদ্বারা রিপোর্ট করা মানগুলি শূন্য হওয়া উচিত যখন টুলটি ডিভাইসে লম্ব হয়৷ একটি নন-জিরো টিল্ট নির্দেশ করে যে টুলটি একটি ঢোকে রাখা হয়েছে।X এবং Y অক্ষ বরাবর কাত কোণগুলি লম্ব থেকে ডিগ্রীতে নির্দিষ্ট করা হয়েছে বলে ধরে নেওয়া হয়। কেন্দ্র বিন্দু (পুরোপুরি লম্ব) প্রতিটি অক্ষের জন্য
(max + min) / 2দ্বারা দেওয়া হয়। কেন্দ্র বিন্দুর চেয়ে ছোট মানগুলি উপরে বা বামে একটি কাত প্রতিনিধিত্ব করে, কেন্দ্র বিন্দুর চেয়ে বড় মানগুলি নীচে বা ডানদিকে একটি কাত উপস্থাপন করে।InputReaderX এবং Y টিল্ট উপাদানগুলিকে 0 থেকেPI / 2রেডিয়ান পর্যন্ত একটি লম্ব কাত কোণে এবং-PIথেকেPIরেডিয়ান পর্যন্ত একটি প্ল্যানার ওরিয়েন্টেশন কোণে রূপান্তরিত করে। এই প্রতিনিধিত্বের ফলে আঙ্গুলের স্পর্শ বর্ণনা করার জন্য যা ব্যবহৃত হয় তার সাথে সামঞ্জস্যপূর্ণ ওরিয়েন্টেশনের বর্ণনা।রিপোর্টিং টিল্ট তথ্য ঐচ্ছিক কিন্তু স্টাইলাস ডিভাইসের জন্য সুপারিশ করা হয়।
যদি টুলের ধরনটি
ABS_MT_TOOL_TYPEদ্বারা রিপোর্ট করা হয়, তাহলে এটিBTN_TOOL_*দ্বারা রিপোর্ট করা যেকোনও টুল টাইপ তথ্যকে ছাড়িয়ে যায়। কোনো টুল টাইপ তথ্য পাওয়া না গেলে, টুলের ধরনটিMotionEvent.TOOL_TYPE_FINGERএ ডিফল্ট হয়।নিম্নলিখিত শর্তগুলির উপর ভিত্তি করে একটি টুল সক্রিয় হতে নির্ধারিত হয়:
একক-টাচ প্রোটোকল ব্যবহার করার সময়,
BTN_TOUCHবাBTN_TOOL_*1 হলে টুলটি সক্রিয় থাকে।এই শর্তটি বোঝায় যে
InputReaderটুলের প্রকৃতি সম্পর্কে অন্তত কিছু তথ্য থাকতে হবে, হয় এটি স্পর্শ করছে কিনা বা অন্ততপক্ষে এর টুলের ধরন। যদি কোন তথ্য পাওয়া না যায়, তাহলে টুলটি নিষ্ক্রিয় (পরিসীমার বাইরে) বলে ধরে নেওয়া হয়।- মাল্টি-টাচ প্রোটোকল 'A' ব্যবহার করার সময়, টুলটি সক্রিয় থাকে যখনই এটি সাম্প্রতিক সিঙ্ক রিপোর্টে প্রদর্শিত হয়। যখন টুলটি সিঙ্ক রিপোর্টে উপস্থিত হওয়া বন্ধ করে, তখন এটির অস্তিত্ব বন্ধ হয়ে যায়।
- মাল্টি-টাচ প্রোটোকল 'B' ব্যবহার করার সময়, টুলটি সক্রিয় থাকে যতক্ষণ না এটির একটি সক্রিয় স্লট থাকে। স্লটটি সাফ হয়ে গেলে, টুলটির অস্তিত্ব বন্ধ হয়ে যায়।
- একটি টুল নিম্নোক্ত অবস্থার উপর ভিত্তি করে ঘোরাফেরা করার জন্য নির্ধারিত হয়:
- যদি টুলটি
BTN_TOOL_MOUSEবাBTN_TOOL_LENSহয়, তাহলে টুলটি ঘোরাফেরা করছে না, এমনকি যদি নিম্নলিখিত শর্তগুলির মধ্যে একটি সত্য হয়। - যদি টুলটি সক্রিয় থাকে এবং ড্রাইভার চাপের তথ্য জানায় এবং রিপোর্ট করা চাপ শূন্য হয়, তাহলে টুলটি ঘোরাফেরা করছে।
- যদি টুলটি সক্রিয় থাকে এবং ড্রাইভার
BTN_TOUCHকী কোড সমর্থন করে এবংBTN_TOUCHএর মান শূন্য থাকে, তাহলে টুলটি ঘোরাফেরা করছে।
- যদি টুলটি
-
InputReaderমাল্টি-টাচ প্রোটোকল 'A' এবং 'B' উভয়কেই সমর্থন করে। নতুন ড্রাইভারদের 'বি' প্রোটোকল ব্যবহার করা উচিত কিন্তু হয় কাজ করে। অ্যান্ড্রয়েড 4.0 অনুযায়ী, লিনাক্স ইনপুট প্রোটোকল স্পেসিফিকেশন মেনে চলতে টাচ স্ক্রিন ড্রাইভার পরিবর্তন করতে হতে পারে।
নিম্নলিখিত পরিবর্তন প্রয়োজন হতে পারে:
যখন একটি টুল নিষ্ক্রিয় হয়ে যায় (আঙুল "উপরে" যায়), এটি পরবর্তী মাল্টি-টাচ সিঙ্ক রিপোর্টে উপস্থিত হওয়া বন্ধ করা উচিত। যখন সমস্ত সরঞ্জাম নিষ্ক্রিয় হয়ে যায় (সমস্ত আঙ্গুল "উপরে" যায়), ড্রাইভারকে একটি খালি সিঙ্ক রিপোর্ট প্যাকেট পাঠাতে হবে, যেমন
SYN_MT_REPORTএর পরেSYN_REPORT।অ্যান্ড্রয়েডের পূর্ববর্তী সংস্করণগুলি প্রত্যাশিত "আপ" ইভেন্টগুলি 0 এর একটি চাপ মান পাঠিয়ে রিপোর্ট করা হবে৷ পুরানো আচরণটি Linux ইনপুট প্রোটোকল স্পেসিফিকেশনের সাথে বেমানান ছিল এবং এটি আর সমর্থিত নয়৷
শারীরিক চাপ বা সংকেত শক্তির তথ্য
ABS_MT_PRESSUREব্যবহার করে রিপোর্ট করা উচিত।Android এর পূর্ববর্তী সংস্করণগুলি
ABS_MT_TOUCH_MAJORথেকে চাপের তথ্য পুনরুদ্ধার করেছে। পুরানো আচরণ লিনাক্স ইনপুট প্রোটোকল স্পেসিফিকেশনের সাথে বেমানান ছিল এবং এটি আর সমর্থিত নয়।- স্পর্শ আকারের তথ্য
ABS_MT_TOUCH_MAJORব্যবহার করে রিপোর্ট করা উচিত।Android এর পূর্ববর্তী সংস্করণগুলি
ABS_MT_TOOL_MAJORথেকে আকারের তথ্য পুনরুদ্ধার করেছে৷ পুরানো আচরণ লিনাক্স ইনপুট প্রোটোকল স্পেসিফিকেশনের সাথে বেমানান ছিল এবং এটি আর সমর্থিত নয়।
টাচ ডিভাইস অপারেশন
নীচে Android এ টাচ ডিভাইস অপারেশনের একটি সংক্ষিপ্ত সারসংক্ষেপ।
-
EventHubevdevড্রাইভারের কাছ থেকে কাঁচা ঘটনা পড়ে। -
InputReaderকাঁচা ঘটনা গ্রহণ করে এবং প্রতিটি টুলের অবস্থান এবং অন্যান্য বৈশিষ্ট্য সম্পর্কে অভ্যন্তরীণ অবস্থা আপডেট করে। এটি বোতামের অবস্থাও ট্র্যাক করে। - যদি BACK বা FORWARD চাপানো হয় বা ছেড়ে দেওয়া হয়,
InputReaderInputDispatcherকী ইভেন্ট সম্পর্কে অবহিত করে। - একটি ভার্চুয়াল কী প্রেস হয়েছে কিনা তা
InputReaderনির্ধারণ করে। যদি তাই হয়, এটি কী ইভেন্ট সম্পর্কেInputDispatcherঅবহিত করে। -
InputReaderনির্ধারণ করে যে স্পর্শটি প্রদর্শনের সীমানার মধ্যে শুরু হয়েছিল কিনা। যদি তাই হয়, এটি স্পর্শ ইভেন্ট সম্পর্কেInputDispatcherঅবহিত করে। - যদি কোনও স্পর্শ করার সরঞ্জাম না থাকে তবে কমপক্ষে একটি হোভারিং টুল থাকে,
InputReaderহোভার ইভেন্ট সম্পর্কেInputDispatcherঅবহিত করে। - যদি টাচ ডিভাইসের ধরনটি পয়েন্টার হয়,
InputReaderপয়েন্টার জেসচার সনাক্তকরণ সঞ্চালন করে, সেই অনুযায়ী পয়েন্টার এবং দাগগুলিকে সরিয়ে দেয় এবংInputDispatcherপয়েন্টার ইভেন্ট সম্পর্কে অবহিত করে। - ইভেন্টগুলি প্রেরণ করা উচিত কিনা এবং সেগুলি ডিভাইসটিকে জাগানো উচিত কিনা তা নির্ধারণ করতে
InputDispatcherWindowManagerPolicyব্যবহার করে৷ তারপর,InputDispatcherউপযুক্ত অ্যাপগুলিতে ইভেন্টগুলি সরবরাহ করে।
স্পর্শ ডিভাইস কনফিগারেশন
টাচ ডিভাইসের আচরণ ডিভাইসের অক্ষ, বোতাম, ইনপুট বৈশিষ্ট্য, ইনপুট ডিভাইস কনফিগারেশন, ভার্চুয়াল কী মানচিত্র এবং কী লেআউট দ্বারা নির্ধারিত হয়।
কীবোর্ড কনফিগারেশনে অংশগ্রহণকারী ফাইলগুলি সম্পর্কে আরও বিশদ বিবরণের জন্য নিম্নলিখিত বিভাগগুলি পড়ুন:
বৈশিষ্ট্য
টাচ ডিভাইসের আচরণ কনফিগার এবং ক্যালিব্রেট করতে সিস্টেমটি অনেক ইনপুট ডিভাইস কনফিগারেশন বৈশিষ্ট্যের উপর নির্ভর করে।
এর একটি কারণ হল টাচ ডিভাইসের জন্য ডিভাইস ড্রাইভার প্রায়ই ডিভাইস-নির্দিষ্ট ইউনিট ব্যবহার করে স্পর্শের বৈশিষ্ট্যগুলি রিপোর্ট করে।
উদাহরণস্বরূপ, অনেক স্পর্শ ডিভাইস একটি অভ্যন্তরীণ ডিভাইস-নির্দিষ্ট স্কেল ব্যবহার করে স্পর্শ যোগাযোগ এলাকা পরিমাপ করে, যেমন স্পর্শ দ্বারা ট্রিগার হওয়া সেন্সর নোডের মোট সংখ্যা। এই কাঁচা আকারের মানটি অ্যাপগুলির জন্য অর্থবহ হবে না কারণ তাদের স্পর্শ ডিভাইস সেন্সর নোডগুলির শারীরিক আকার এবং অন্যান্য বৈশিষ্ট্যগুলি সম্পর্কে জানতে হবে৷
সিস্টেমটি ইনপুট ডিভাইস কনফিগারেশন ফাইলগুলিতে এনকোড করা ক্রমাঙ্কন পরামিতিগুলি ব্যবহার করে স্পর্শ ডিভাইস দ্বারা রিপোর্ট করা মানগুলিকে ডিকোড, রূপান্তর এবং স্বাভাবিক করার জন্য একটি সহজ আদর্শ উপস্থাপনা যা অ্যাপগুলি বুঝতে পারে৷
ডকুমেন্টেশন কনভেনশন
ডকুমেন্টেশনের উদ্দেশ্যে, আমরা ক্রমাঙ্কন প্রক্রিয়া চলাকালীন সিস্টেম দ্বারা ব্যবহৃত মানগুলি বর্ণনা করতে নিম্নলিখিত নিয়মগুলি ব্যবহার করি।
কাঁচা অক্ষ মান
নিম্নলিখিত অভিব্যক্তিগুলি স্পর্শ ডিভাইস ড্রাইভার দ্বারা রিপোর্ট করা কাঁচা মানগুলিকে EV_ABS ইভেন্ট হিসাবে নির্দেশ করে৷
-
raw.x -
ABS_XবাABS_MT_POSITION_Xঅক্ষের মান। -
raw.y -
ABS_YবাABS_MT_POSITION_Yঅক্ষের মান। -
raw.pressure -
ABS_PRESSUREবাABS_MT_PRESSUREঅক্ষের মান, অথবা 0 যদি উপলব্ধ না হয়। -
raw.touchMajor -
ABS_MT_TOUCH_MAJORঅক্ষের মান, অথবা 0 যদি উপলব্ধ না হয়। -
raw.touchMinor -
ABS_MT_TOUCH_MINORঅক্ষের মান, অথবাraw.touchMajorউপলব্ধ না হলে। -
raw.toolMajor -
ABS_TOOL_WIDTHবাABS_MT_WIDTH_MAJORঅক্ষের মান, অথবা 0 যদি উপলব্ধ না হয়। -
raw.toolMinor -
ABS_MT_WIDTH_MINORঅক্ষের মান, অথবাraw.toolMajorউপলব্ধ না হলে। -
raw.orientation -
ABS_MT_ORIENTATIONঅক্ষের মান, অথবা 0 যদি উপলব্ধ না হয়। -
raw.distance -
ABS_DISTANCEবাABS_MT_DISTANCEঅক্ষের মান, অথবা 0 যদি উপলব্ধ না হয়। -
raw.tiltX -
ABS_TILT_Xঅক্ষের মান, অথবা 0 যদি উপলব্ধ না হয়। -
raw.tiltY -
ABS_TILT_Yঅক্ষের মান, অথবা 0 যদি উপলব্ধ না হয়।
কাঁচা অক্ষ রেঞ্জ
নিম্নলিখিত অভিব্যক্তিগুলি কাঁচা মানগুলির সীমা নির্দেশ করে৷ প্রতিটি অক্ষের জন্য EVIOCGABS ioctl কল করে সেগুলি পাওয়া যায়।
-
raw.*.min - কাঁচা অক্ষের অন্তর্ভুক্ত সর্বনিম্ন মান।
-
raw.*.max - কাঁচা অক্ষের অন্তর্ভুক্ত সর্বোচ্চ মান।
-
raw.*.range -
raw.*.max - raw.*.min -
raw.*.fuzz - কাঁচা অক্ষের নির্ভুলতা। যেমন fuzz = 1 বোঝায় মান +/- 1 ইউনিটে সঠিক।
-
raw.width - স্পর্শ এলাকার অন্তর্ভুক্ত প্রস্থ,
raw.x.range + 1এর সমতুল্য। -
raw.height - স্পর্শ এলাকার সমন্বিত উচ্চতা,
raw.y.range + 1এর সমতুল্য।
আউটপুট রেঞ্জ
নিম্নলিখিত অভিব্যক্তিগুলি আউটপুট স্থানাঙ্ক সিস্টেমের বৈশিষ্ট্যগুলি নির্দেশ করে। ডিসপ্লে পিক্সেলের মতো অ্যাপগুলিতে রিপোর্ট করা আউটপুট ইউনিটগুলিতে স্পর্শ ডিভাইস দ্বারা ব্যবহৃত পৃষ্ঠের ইউনিটগুলি থেকে স্পর্শ অবস্থানের তথ্য অনুবাদ করতে সিস্টেমটি রৈখিক ইন্টারপোলেশন ব্যবহার করে।
-
output.width - আউটপুট প্রস্থ। টাচ স্ক্রিনের জন্য (একটি ডিসপ্লের সাথে যুক্ত), এটি পিক্সেলে প্রদর্শনের প্রস্থ। টাচ প্যাডের জন্য (একটি ডিসপ্লের সাথে সম্পর্কিত নয়), আউটপুট প্রস্থ
raw.widthসমান, যা নির্দেশ করে যে কোন ইন্টারপোলেশন সঞ্চালিত হয় না। -
output.height - আউটপুট উচ্চতা। টাচ স্ক্রিনের জন্য (একটি ডিসপ্লের সাথে যুক্ত), এটি পিক্সেলে প্রদর্শনের উচ্চতা। টাচ প্যাডের জন্য (একটি ডিসপ্লের সাথে যুক্ত নয়), আউটপুট উচ্চতা
raw.heightসমান, যা নির্দেশ করে যে কোন ইন্টারপোলেশন সঞ্চালিত হয় না। -
output.diag - আউটপুট স্থানাঙ্ক সিস্টেমের তির্যক দৈর্ঘ্য,
sqrt(output.width ^2 + output.height ^2)এর সমতুল্য।
মৌলিক কনফিগারেশন
স্পর্শ ইনপুট ম্যাপার ক্যালিব্রেশন মান নির্দিষ্ট করতে ইনপুট ডিভাইস কনফিগারেশন ফাইলে অনেক কনফিগারেশন বৈশিষ্ট্য ব্যবহার করে। নিম্নলিখিত সারণী কিছু সাধারণ উদ্দেশ্য কনফিগারেশন বৈশিষ্ট্য বর্ণনা করে। অন্যান্য সমস্ত বৈশিষ্ট্যগুলি নিম্নোক্ত বিভাগে বর্ণনা করা হয়েছে এবং সেগুলি ক্রমাঙ্কন করতে ব্যবহৃত ক্ষেত্রগুলির সাথে।
touch.deviceType
সংজ্ঞা: touch.deviceType = touchScreen | touchPad | pointer | default
স্পর্শ ডিভাইসের ধরন নির্দিষ্ট করে।
যদি মান
touchScreenহয়, টাচ ডিভাইসটি একটি ডিসপ্লের সাথে যুক্ত একটি টাচ স্ক্রিন।মানটি
touchPadহলে, টাচ ডিভাইসটি একটি টাচ প্যাড যা ডিসপ্লের সাথে যুক্ত নয়।যদি মানটি
pointerহয়, তাহলে টাচ ডিভাইসটি একটি টাচ প্যাড যা একটি প্রদর্শনের সাথে যুক্ত নয় এবং এর গতিগুলি পরোক্ষ মাল্টি-টাচ পয়েন্টার অঙ্গভঙ্গির জন্য ব্যবহৃত হয়।মান
defaultহলে, সিস্টেম স্বয়ংক্রিয়ভাবে শ্রেণীবিভাগ অ্যালগরিদম অনুযায়ী ডিভাইসের ধরন সনাক্ত করে।
ডিভাইসের ধরন কীভাবে স্পর্শ ডিভাইসের আচরণকে প্রভাবিত করে সে সম্পর্কে আরও বিশদ বিবরণের জন্য শ্রেণিবিন্যাস বিভাগটি পড়ুন।
অ্যান্ড্রয়েড 3 এবং তার চেয়ে কম সময়ে, সমস্ত টাচ ডিভাইসকে টাচ স্ক্রিন বলে ধরে নেওয়া হয়েছিল।
touch.orientationAware
সংজ্ঞা: touch.orientationAware = 0 | 1
স্পর্শ ডিভাইসের অভিযোজন পরিবর্তনগুলি প্রদর্শন করা উচিত কিনা তা নির্দিষ্ট করে৷
মান
1হলে, যখনই ডিসপ্লে ওরিয়েন্টেশন পরিবর্তন হয় তখন টাচ ডিভাইস দ্বারা রিপোর্ট করা টাচ পজিশন ঘোরানো হয়।মান
0হলে, স্পর্শ ডিভাইস দ্বারা রিপোর্ট করা স্পর্শ অবস্থানগুলি অভিযোজন পরিবর্তনগুলি প্রদর্শন করতে অনাক্রম্য।
ডিভাইসটি টাচ স্ক্রিন হলে ডিফল্ট মান 1 , অন্যথায় 0 ।
সিস্টেমটি অভ্যন্তরীণ এবং বাহ্যিক টাচ স্ক্রিন এবং প্রদর্শনের মধ্যে পার্থক্য করে। অভ্যন্তরীণ ডিসপ্লের ওরিয়েন্টেশনের উপর ভিত্তি করে একটি ওরিয়েন্টেশন সচেতন অভ্যন্তরীণ টাচ স্ক্রিন ঘোরানো হয়। বাহ্যিক প্রদর্শনের অভিযোজনের উপর ভিত্তি করে একটি ওরিয়েন্টেশন সচেতন বাহ্যিক টাচ স্ক্রিন ঘোরানো হয়।
ওরিয়েন্টেশন সচেতনতা নেক্সাস ওয়ানের মতো ডিভাইসে টাচ স্ক্রিনের ঘূর্ণন সমর্থন করতে ব্যবহৃত হয়। উদাহরণস্বরূপ, যখন ডিভাইসটিকে ঘড়ির কাঁটার দিকে ঘোরানো হয় তার স্বাভাবিক স্থিতি থেকে 90 ডিগ্রি, স্পর্শের পরম অবস্থানগুলিকে এমনভাবে রিম্যাপ করা হয় যে টাচ স্ক্রিনের পরম স্থানাঙ্ক সিস্টেমের উপরের-বাম কোণে একটি স্পর্শ ডিসপ্লের ঘূর্ণিত স্থানাঙ্ক সিস্টেমের উপরের-বাম কোণে একটি স্পর্শ হিসাবে রিপোর্ট করা হয়। এটি করা হয় যাতে স্পর্শগুলি একই স্থানাঙ্ক সিস্টেমের সাথে রিপোর্ট করা হয় যা অ্যাপগুলি তাদের ভিজ্যুয়াল উপাদানগুলি আঁকতে ব্যবহার করে।
মধুচক্রের আগে, সমস্ত স্পর্শ ডিভাইসকে অভিযোজন সচেতন বলে ধরে নেওয়া হয়েছিল।
touch.gestureMode
সংজ্ঞা: touch.gestureMode = pointer | spots | default
পয়েন্টার অঙ্গভঙ্গির জন্য উপস্থাপনা মোড নির্দিষ্ট করে। এই কনফিগারেশন বৈশিষ্ট্যটি তখনই প্রাসঙ্গিক যখন স্পর্শ ডিভাইসটি টাইপ পয়েন্টার ।
যদি মানটি
pointerহয়, টাচ প্যাড অঙ্গভঙ্গিগুলি মাউস পয়েন্টারের মতো কার্সারের মাধ্যমে উপস্থাপন করা হয়।যদি মানটি
spotsহয়, তাহলে স্পর্শ প্যাড অঙ্গভঙ্গিগুলি একটি অ্যাঙ্কর দ্বারা উপস্থাপিত হয় যা অঙ্গভঙ্গির কেন্দ্রিক এবং বৃত্তাকার দাগের একটি সেট যা পৃথক আঙ্গুলের অবস্থানকে প্রতিনিধিত্ব করে।
INPUT_PROP_SEMI_MT ইনপুট বৈশিষ্ট্য সেট করা হলে ডিফল্ট মান pointer হয়, অথবা অন্যথায় spots ।
X এবং Y ক্ষেত্র
X এবং Y ক্ষেত্র যোগাযোগ এলাকার কেন্দ্রের জন্য অবস্থানগত তথ্য প্রদান করে।
হিসাব
গণনাটি সহজবোধ্য: টাচ ড্রাইভার থেকে অবস্থানগত তথ্য আউটপুট সমন্বয় সিস্টেমে রৈখিকভাবে ইন্টারপোলেট করা হয়।
xScale = output.width / raw.width
yScale = output.height / raw.height
If not orientation aware or screen rotation is 0 degrees:
output.x = (raw.x - raw.x.min) * xScale
output.y = (raw.y - raw.y.min) * yScale
Else If rotation is 90 degrees:
output.x = (raw.y - raw.y.min) * yScale
output.y = (raw.x.max - raw.x) * xScale
Else If rotation is 180 degrees:
output.x = (raw.x.max - raw.x) * xScale
output.y = (raw.y.max - raw.y) * yScale
Else If rotation is 270 degrees:
output.x = (raw.y.max - raw.y) * yScale
output.y = (raw.x - raw.x.min) * xScale
End If
touchMajor, touchMinor, toolMajor, toolMinor, সাইজ ফিল্ড
touchMajor এবং touchMinor ক্ষেত্রগুলি আউটপুট ইউনিটে (পিক্সেল) যোগাযোগ এলাকার আনুমানিক মাত্রা বর্ণনা করে।
toolMajor এবং toolMinor ক্ষেত্রগুলি আউটপুট ইউনিটে (পিক্সেল) টুলের আনুমানিক মাত্রা বর্ণনা করে।
size ক্ষেত্রটি স্পর্শ ডিভাইসটি উপলব্ধি করতে পারে এমন বৃহত্তম সম্ভাব্য স্পর্শের তুলনায় স্পর্শের স্বাভাবিক আকারের বর্ণনা করে। সবচেয়ে ছোট সম্ভাব্য স্বাভাবিক আকার হল 0.0 (কোন যোগাযোগ নেই, বা এটি পরিমাপযোগ্য নয়), এবং সবচেয়ে বড় সম্ভাব্য স্বাভাবিক আকার হল 1.0 (সেন্সর এলাকা সম্পৃক্ত)।
যখন আনুমানিক দৈর্ঘ্য এবং প্রস্থ উভয়ই পরিমাপ করা যায়, তখন touchMajor ক্ষেত্রটি দীর্ঘ মাত্রা নির্দিষ্ট করে এবং touchMinor ক্ষেত্রটি যোগাযোগ এলাকার ছোট মাত্রা নির্দিষ্ট করে। যখন শুধুমাত্র যোগাযোগ এলাকার আনুমানিক ব্যাস পরিমাপ করা যায়, তখন touchMajor এবং touchMinor ক্ষেত্রগুলি সমান হয়।
একইভাবে, toolMajor ক্ষেত্রটি দীর্ঘ মাত্রা নির্দিষ্ট করে এবং toolMinor ক্ষেত্রটি টুলের ক্রস-বিভাগীয় এলাকার ছোট মাত্রা নির্দিষ্ট করে।
যদি স্পর্শের আকার অনুপলব্ধ হয় কিন্তু টুলের আকার পাওয়া যায়, তাহলে টুলের আকার স্পর্শ আকারের সমান সেট করা হয়। বিপরীতভাবে, যদি টুলের আকার অনুপলব্ধ হয় কিন্তু স্পর্শের আকার উপলব্ধ থাকে, তাহলে স্পর্শের আকারটি টুল আকারের সমান সেট করা হয়।
টাচ ডিভাইসগুলি বিভিন্ন উপায়ে স্পর্শের আকার এবং টুলের আকার পরিমাপ করে বা রিপোর্ট করে। বর্তমান বাস্তবায়ন তিনটি ভিন্ন ধরণের পরিমাপ সমর্থন করে: ব্যাস, ক্ষেত্রফল এবং পৃষ্ঠের এককগুলিতে জ্যামিতিক বাউন্ডিং বক্স।
সংজ্ঞা: touch.size.calibration = none | geometric | diameter | area | default
টাচ সাইজ এবং টুল সাইজ রিপোর্ট করতে টাচ ড্রাইভার দ্বারা ব্যবহৃত পরিমাপের ধরন নির্দিষ্ট করে।
মান
noneহলে, আকার শূন্য সেট করা হয়.মানটি
geometricহলে, আকারটি অবস্থানের মতো একই পৃষ্ঠের এককগুলিতে নির্দিষ্ট করা হয়েছে বলে ধরে নেওয়া হয়, তাই এটি একই পদ্ধতিতে মাপানো হয়।মানটি
diameterহলে, আকারটি স্পর্শ বা টুলের ব্যাসের (প্রস্থ) সমানুপাতিক বলে ধরে নেওয়া হয়।যদি মানটি
areaহয় তবে আকারটি স্পর্শ বা সরঞ্জামের ক্ষেত্রফলের সমানুপাতিক বলে ধরে নেওয়া হয়।মানটি
defaultহলে, সিস্টেমটিgeometricক্রমাঙ্কন ব্যবহার করে যদিraw.touchMajorবাraw.toolMajorঅক্ষ উপলব্ধ থাকে, অন্যথায় এটিnoneক্রমাঙ্কন ব্যবহার করে না।
touch.size.scale
সংজ্ঞা: touch.size.scale = <a non-negative floating point number>
ক্রমাঙ্কনে ব্যবহৃত একটি ধ্রুবক স্কেল ফ্যাক্টর নির্দিষ্ট করে।
ডিফল্ট মান হল 1.0 ।
touch.size.bias
সংজ্ঞা: touch.size.bias = <একটি অ-নেতিবাচক ভাসমান বিন্দু সংখ্যা>
ক্রমাঙ্কনে ব্যবহৃত একটি ধ্রুবক পক্ষপাত মান নির্দিষ্ট করে।
ডিফল্ট মান হল 0.0 ।
touch.size.issummed
সংজ্ঞা: touch.size.isSummed = 0 | 1
আকারটি সমস্ত সক্রিয় পরিচিতির আকারের যোগফল হিসাবে রিপোর্ট করা হয়েছে বা প্রতিটি পরিচিতির জন্য পৃথকভাবে রিপোর্ট করা হয়েছে কিনা তা নির্দিষ্ট করে৷
মান
1হলে, রিপোর্ট করা আকার ব্যবহারের পূর্বে পরিচিতির সংখ্যা দ্বারা ভাগ করা হয়।মান
0হলে, রিপোর্ট করা আকার হিসাবে ব্যবহার করা হয়।
ডিফল্ট মান হল 0 ।
কিছু স্পর্শ ডিভাইস, বিশেষ করে "সেমি-এমটি" ডিভাইসগুলি একাধিক পরিচিতির পৃথক মাত্রাগুলিকে আলাদা করতে পারে না তাই তারা একটি আকার পরিমাপের রিপোর্ট করে যা তাদের মোট এলাকা বা প্রস্থকে প্রতিনিধিত্ব করে। এই ধরনের ডিভাইসের জন্য এই সম্পত্তি শুধুমাত্র 1 সেট করা উচিত। সন্দেহ হলে, এই মানটি 0 এ সেট করুন।
হিসাব
touchMajor , touchMinor , toolMajor , toolMinor , এবং size ক্ষেত্রগুলির গণনা নির্দিষ্ট ক্রমাঙ্কন পরামিতির উপর নির্ভর করে৷
If raw.touchMajor and raw.toolMajor are available:
touchMajor = raw.touchMajor
touchMinor = raw.touchMinor
toolMajor = raw.toolMajor
toolMinor = raw.toolMinor
Else If raw.touchMajor is available:
toolMajor = touchMajor = raw.touchMajor
toolMinor = touchMinor = raw.touchMinor
Else If raw.toolMajor is available:
touchMajor = toolMajor = raw.toolMajor
touchMinor = toolMinor = raw.toolMinor
Else
touchMajor = toolMajor = 0
touchMinor = toolMinor = 0
size = 0
End If
size = avg(touchMajor, touchMinor)
If touch.size.isSummed == 1:
touchMajor = touchMajor / numberOfActiveContacts
touchMinor = touchMinor / numberOfActiveContacts
toolMajor = toolMajor / numberOfActiveContacts
toolMinor = toolMinor / numberOfActiveContacts
size = size / numberOfActiveContacts
End If
If touch.size.calibration == "none":
touchMajor = toolMajor = 0
touchMinor = toolMinor = 0
size = 0
Else If touch.size.calibration == "geometric":
outputScale = average(output.width / raw.width, output.height / raw.height)
touchMajor = touchMajor * outputScale
touchMinor = touchMinor * outputScale
toolMajor = toolMajor * outputScale
toolMinor = toolMinor * outputScale
Else If touch.size.calibration == "area":
touchMajor = sqrt(touchMajor)
touchMinor = touchMajor
toolMajor = sqrt(toolMajor)
toolMinor = toolMajor
Else If touch.size.calibration == "diameter":
touchMinor = touchMajor
toolMinor = toolMajor
End If
If touchMajor != 0:
output.touchMajor = touchMajor * touch.size.scale + touch.size.bias
Else
output.touchMajor = 0
End If
If touchMinor != 0:
output.touchMinor = touchMinor * touch.size.scale + touch.size.bias
Else
output.touchMinor = 0
End If
If toolMajor != 0:
output.toolMajor = toolMajor * touch.size.scale + touch.size.bias
Else
output.toolMajor = 0
End If
If toolMinor != 0:
output.toolMinor = toolMinor * touch.size.scale + touch.size.bias
Else
output.toolMinor = 0
End If
output.size = size
চাপ ক্ষেত্র
pressure ক্ষেত্রটি স্পর্শ ডিভাইসে প্রয়োগ করা আনুমানিক শারীরিক চাপকে 0.0 (কোন স্পর্শ নয়) এবং 1.0 (সাধারণ চাপ) এর মধ্যে একটি স্বাভাবিক মান হিসাবে বর্ণনা করে।
একটি শূন্য চাপ নির্দেশ করে যে টুলটি ঘোরাফেরা করছে।
touch.pressure.calibration
সংজ্ঞা: touch.pressure.calibration = none | physical | amplitude | default
চাপ রিপোর্ট করতে স্পর্শ ড্রাইভার দ্বারা ব্যবহৃত পরিমাপ ধরনের নির্দিষ্ট করে।
যদি মান
noneহয়, চাপটি অজানা তাই এটি স্পর্শ করার সময় 1.0 এবং ঘোরানোর সময় 0.0 সেট করা হয়।যদি মানটি
physicalহয়, তাহলে চাপের অক্ষটি স্পর্শ প্যাডে প্রয়োগ করা চাপের প্রকৃত শারীরিক তীব্রতা পরিমাপ করার জন্য ধরে নেওয়া হয়।যদি মানটি
amplitudeহয়, তাহলে চাপের অক্ষকে সংকেত প্রশস্ততা পরিমাপ করার জন্য ধরে নেওয়া হয়, যা যোগাযোগের আকার এবং প্রয়োগ করা চাপের সাথে সম্পর্কিত।মানটি
defaultহলে, চাপের অক্ষ উপলব্ধ থাকলে সিস্টেমটিphysicalক্রমাঙ্কন ব্যবহার করে, অন্যথায়noneব্যবহার করে না।
স্পর্শ.চাপ.স্কেল
সংজ্ঞা: touch.pressure.scale = <একটি অ-নেতিবাচক ভাসমান বিন্দু সংখ্যা>
ক্রমাঙ্কনে ব্যবহৃত একটি ধ্রুবক স্কেল ফ্যাক্টর নির্দিষ্ট করে।
The default value is 1.0 / raw.pressure.max .
হিসাব
The calculation of the pressure field depends on the specified calibration parameters.
If touch.pressure.calibration == "physical" or "amplitude":
output.pressure = raw.pressure * touch.pressure.scale
Else
If hovering:
output.pressure = 0
Else
output.pressure = 1
End If
End If
orientation and tilt fields
The orientation field describes the orientation of the touch and tool as an angular measurement. An orientation of 0 indicates that the major axis is oriented vertically, -PI/2 indicates that the major axis is oriented to the left, PI/2 indicates that the major axis is oriented to the right. When a stylus tool is present, the orientation range can be described in a full circle range from -PI or PI .
The tilt field describes the inclination of the tool as an angular measurement. A tilt of 0 indicates that the tool is perpendicular to the surface. A tilt of PI/2 indicates that the tool is flat on the surface.
touch.orientation.calibration
Definition: touch.orientation.calibration = none | interpolated | vector | default
Specifies the kind of measurement used by the touch driver to report the orientation.
- If the value is
none, the orientation is unknown so it is set to 0. - If the value is
interpolated, the orientation is linearly interpolated such that a raw value ofraw.orientation.minmaps to-PI/2and a raw value ofraw.orientation.maxmaps toPI/2. The center value of(raw.orientation.min + raw.orientation.max) / 2maps to0. - If the value is
vector, the orientation is interpreted as a packed vector consisiting of two signed 4-bit fields. This representation is used on Atmel Object Based Protocol parts. When decoded, the vector yields an orientation angle and confidence magnitude. The confidence magnitude is used to scale the size information, unless it is geometric. - If the value is
default, the system uses theinterpolatedcalibration if the orientation axis available, otherwise usesnone.
হিসাব
The calculation of the orientation and tilt fields depends on the specified calibration parameters and available input.
If touch.tiltX and touch.tiltY are available:
tiltXCenter = average(raw.tiltX.min, raw.tiltX.max)
tiltYCenter = average(raw.tiltY.min, raw.tiltY.max)
tiltXAngle = (raw.tiltX - tiltXCenter) * PI / 180
tiltYAngle = (raw.tiltY - tiltYCenter) * PI / 180
output.orientation = atan2(-sin(tiltXAngle), sinf(tiltYAngle))
output.tilt = acos(cos(tiltXAngle) * cos(tiltYAngle))
Else If touch.orientation.calibration == "interpolated":
center = average(raw.orientation.min, raw.orientation.max)
output.orientation = PI / (raw.orientation.max - raw.orientation.min)
output.tilt = 0
Else If touch.orientation.calibration == "vector":
c1 = (raw.orientation & 0xF0) >> 4
c2 = raw.orientation & 0x0F
If c1 != 0 or c2 != 0:
If c1 >= 8 Then c1 = c1 - 16
If c2 >= 8 Then c2 = c2 - 16
angle = atan2(c1, c2) / 2
confidence = sqrt(c1*c1 + c2*c2)
output.orientation = angle
If touch.size.calibration == "diameter" or "area":
scale = 1.0 + confidence / 16
output.touchMajor *= scale
output.touchMinor /= scale
output.toolMajor *= scale
output.toolMinor /= scale
End If
Else
output.orientation = 0
End If
output.tilt = 0
Else
output.orientation = 0
output.tilt = 0
End If
If orientation aware:
If screen rotation is 90 degrees:
output.orientation = output.orientation - PI / 2
Else If screen rotation is 270 degrees:
output.orientation = output.orientation + PI / 2
End If
End If
distance field
The distance field describes the distance between the tool and the touch device surface. A value of 0.0 indicates direct contact and larger values indicate increasing distance from the surface.
touch.distance.calibration
Definition: touch.distance.calibration = none | scaled | default
Specifies the kind of measurement used by the touch driver to report the distance.
If the value is
none, the distance is unknown so it is set to 0.If the value is
scaled, the reported distance is multiplied by a constant scale factor.If the value is
default, the system uses thescaledcalibration if the distance axis available, otherwise usesnone.
touch.distance.scale
Definition: touch.distance.scale = <a non-negative floating point number>
Specifies a constant scale factor used in the calibration.
The default value is 1.0 .
হিসাব
The calculation of the distance field depends on the specified calibration parameters.
If touch.distance.calibration == "scaled":
output.distance = raw.distance * touch.distance.scale
Else
output.distance = 0
End If
উদাহরণ
# Input device configuration file for a touch screen that supports pressure, # size and orientation. The pressure and size scale factors were obtained # by measuring the characteristics of the device itself and deriving # useful approximations based on the resolution of the touch sensor and the # display. # # Note that these parameters are specific to a particular device model. # Different parameters need to be used for other devices. # Basic Parameters touch.deviceType = touchScreen touch.orientationAware = 1 # Size # Based on empirical measurements, we estimate the size of the contact # using size = sqrt(area) * 28 + 0. touch.size.calibration = area touch.size.scale = 28 touch.size.bias = 0 touch.size.isSummed = 0 # Pressure # Driver reports signal strength as pressure. # # A normal index finger touch typically registers about 80 signal strength # units although we don't expect these values to be accurate. touch.pressure.calibration = amplitude touch.pressure.scale = 0.0125 # Orientation touch.orientation.calibration = vector
Compatibility notes
The configuration properties for touch devices changed significantly in Android Ice Cream Sandwich 4.0. All input device configuration files for touch devices must be updated to use the new configuration properties.
Older touch device drivers might also need to be updated.
Virtual key map files
Touch devices can be used to implement virtual keys.
There are several ways of doing this, depending on the capabilities of the touch controller. Some touch controllers can be directly configured to implement soft keys by setting firmware registers. Other times it is desirable to perform the mapping from touch coordinates to key codes in software.
When virtual keys are implemented in software, the kernel must export a virtual key map file called virtualkeys.<devicename> as a board property. For example, if the touch screen device drivers reports its name as "touchyfeely" then the virtual key map file must have the path /sys/board_properties/virtualkeys.touchyfeely .
A virtual key map file describes the coordinates and Linux key codes of virtual keys on the touch screen.
In addition to the virtual key map file, there must be a corresponding key layout file and key character map file to map the Linux key codes to Android key codes and to specify the type of the keyboard device (usually SPECIAL_FUNCTION ).
সিনট্যাক্স
A virtual key map file is a plain text file consisting of a sequence of virtual key layout descriptions either separated by newlines or by colons.
Comment lines begin with '#' and continue to the end of the line.
Each virtual key is described by 6 colon-delimited components:
-
0x01: A version code. Must always be0x01. - <Linux key code>: The Linux key code of the virtual key.
- <centerX>: The X pixel coordinate of the center of the virtual key.
- <centerY>: The Y pixel coordinate of the center of the virtual key.
- <width>: The width of the virtual key in pixels.
- <height>: The height of the virtual key in pixels.
All coordinates and sizes are specified in terms of the display coordinate system.
Here is a virtual key map file all written on one line.
# All on one line 0x01:158:55:835:90:55:0x01:139:172:835:125:55:0x01:102:298:835:115:55:0x01:217:412:835:95:55
The same virtual key map file can also be written on multiple lines.
# One key per line 0x01:158:55:835:90:55 0x01:139:172:835:125:55 0x01:102:298:835:115:55 0x01:217:412:835:95:55
In the above example, the touch screen has a resolution of 480x800. Accordingly, all of the virtual keys have a <centerY> coordinate of 835, which is a little bit below the visible area of the touch screen.
The first key has a Linux scan code of 158 ( KEY_BACK ), centerX of 55 , centerY of 835 , width of 90 , and height of 55 .
উদাহরণ
Virtual key map file: /sys/board_properties/virtualkeys.touchyfeely .
0x01:158:55:835:90:55 0x01:139:172:835:125:55 0x01:102:298:835:115:55 0x01:217:412:835:95:55
Key layout file: /system/usr/keylayout/touchyfeely.kl .
key 158 BACK key 139 MENU key 172 HOME key 217 SEARCH
Key character map file: /system/usr/keychars/touchyfeely.kcm .
type SPECIAL_FUNCTION
Indirect multi-touch pointer gestures
In pointer mode, the system interprets the following gestures:
- Single finger tap: click.
- Single finger motion: move the pointer.
- Single finger motion plus button presses: drag the pointer.
- Two finger motion both fingers moving in the same direction: drag the area under the pointer in that direction. The pointer itself does not move.
- Two finger motion both fingers moving towards each other or apart in different directions: pan/scale/rotate the area surrounding the pointer. The pointer itself does not move.
- Multiple finger motion: freeform gesture.
পাম প্রত্যাখ্যান
As of Android 13, the system can automatically reject inputs from palms when the built-in framework is enabled. In-house, custom-built solutions are still supported, though they might need to be modified to return the TOOL_TYPE_PALM flag when a palm is detected. The built-in framework also works in conjunction with custom solutions.
The actual model looks at the first 90 ms of gesture data, at the current pointer, and at the surrounding pointers, then considers how far away from the display edge the touches are. It then determines, on a per-pointer basis, which of the pointers are palms. It also takes into account the size of each contact, as reported by touchMajor and touchMinor . The Android framework then removes the pointers that are marked as palms from the touch stream.
If a pointer was already sent to the apps, then the system either:
- (If there are other active pointers) Cancels the pointer with
ACTION_POINTER_UPandFLAG_CANCELEDset. - (If this is the only pointer) Cancels the pointer with
ACTION_CANCEL.
A public API, MotionEvent.FLAG_CANCELED , indicates that the current event shouldn't trigger user action. This flag is set for both ACTION_CANCEL and ACTION_POINTER_UP .
If the palm pointer wasn't sent to apps, then the system simply drops the pointer.
Enable palm rejection
- In your touch driver, use the
input_abs_set_resmacro to set the resolutions for the following fields (units are pixels per mm ):-
ABS_MT_POSITION_X -
ABS_MT_POSITION_Y -
ABS_MT_TOUCH_MAJOR -
ABS_MT_TOUCH_MINOR
Support for
ABS_MT_TOUCH_MINORis optional. However, if your device does support it, make sure the resolution is set correctly. -
- To confirm the fields are set correctly, run:
$ adb shell getevent -li - To enable the feature during runtime, run:
$ adb shell device_config put input_native_boot palm_rejection_enabled 1 - Restart the
system_serverprocess.$ adb shell stop && adb shell start - Confirm that
adb shell dumpsys inputshows that there are palm rejectors insideUnwantedInteractionBlocker. If it doesn't, check the input-related logs to find clues on what might be misconfigured.See the following example for reference:
UnwantedInteractionBlocker: mEnablePalmRejection: true isPalmRejectionEnabled (flag value): true mPalmRejectors: deviceId = 3: mDeviceInfo: max_x =max_y = x_res = 11.00 y_res = 11.00 major_radius_res = 1.00 minor_radius_res = 1.00 minor_radius_supported = true touch_major_res = 1 touch_minor_res = 1 mSlotState: mSlotsByPointerId: mPointerIdsBySlot: mSuppressedPointerIds: {} - To permanently enable the feature, add the corresponding sysprop command in your
init**rcfile:setprop persist.device_config.input_native_boot.palm_rejection_enabled 1