टच डिवाइस

संग्रह की मदद से व्यवस्थित रहें अपनी प्राथमिकताओं के आधार पर, कॉन्टेंट को सेव करें और कैटगरी में बांटें.

एंड्रॉइड विभिन्न प्रकार के टच स्क्रीन और टच पैड का समर्थन करता है, जिसमें स्टाइलस-आधारित डिजिटाइज़र टैबलेट शामिल हैं।

टच स्क्रीन टच डिवाइस हैं जो एक डिस्प्ले से जुड़े होते हैं जैसे कि उपयोगकर्ता को स्क्रीन पर सीधे मैनिपुलेटिंग आइटम का आभास होता है।

टच पैड टच डिवाइस हैं जो डिजिटाइज़र टैबलेट जैसे डिस्प्ले से जुड़े नहीं हैं। टच पैड का उपयोग आमतौर पर इंगित करने के लिए या पूर्ण अप्रत्यक्ष स्थिति या उपयोगकर्ता इंटरफ़ेस के जेस्चर-आधारित नियंत्रण के लिए किया जाता है।

स्पर्श उपकरणों में बटन हो सकते हैं जिनके कार्य माउस बटन के समान होते हैं।

स्पर्श उपकरणों को कभी-कभी अंतर्निहित स्पर्श संवेदक तकनीक के आधार पर उंगलियों या स्टाइलस जैसे विभिन्न उपकरणों का उपयोग करके हेरफेर किया जा सकता है।

स्पर्श उपकरणों का उपयोग कभी-कभी वर्चुअल कुंजियों को लागू करने के लिए किया जाता है। उदाहरण के लिए, कुछ Android उपकरणों पर, टच स्क्रीन सेंसर क्षेत्र डिस्प्ले के किनारे से आगे तक फैला होता है और टच सेंसिटिव कुंजी पैड के हिस्से के रूप में दोहरे उद्देश्य को पूरा करता है।

स्पर्श उपकरणों की विशाल विविधता के कारण, Android प्रत्येक डिवाइस की विशेषताओं और वांछित व्यवहार का वर्णन करने के लिए बड़ी संख्या में कॉन्फ़िगरेशन गुणों पर निर्भर करता है।

उपकरण वर्गीकरण स्पर्श करें

एक इनपुट डिवाइस को मल्टी-टच डिवाइस के रूप में वर्गीकृत किया जाता है, यदि निम्न दोनों स्थितियां हों:

  • इनपुट डिवाइस ABS_MT_POSITION_X और ABS_MT_POSITION_Y निरपेक्ष अक्षों की उपस्थिति की रिपोर्ट करता है।

  • इनपुट डिवाइस में कोई गेमपैड बटन नहीं है। यह स्थिति कुछ गेमपैड के साथ एक अस्पष्टता को हल करती है जो एमटी अक्षों को ओवरलैप करने वाले कोड के साथ कुल्हाड़ियों की रिपोर्ट करती है।

एक इनपुट डिवाइस को सिंगल-टच डिवाइस के रूप में वर्गीकृत किया जाता है, यदि निम्न दोनों स्थितियां हों:

  • इनपुट डिवाइस को मल्टी-टच डिवाइस के रूप में वर्गीकृत नहीं किया गया है। एक इनपुट डिवाइस को या तो सिंगल-टच डिवाइस या मल्टी-टच डिवाइस के रूप में वर्गीकृत किया जाता है, दोनों कभी नहीं।

  • इनपुट डिवाइस ABS_X और ABS_Y निरपेक्ष अक्षों की उपस्थिति और BTN_TOUCH कुंजी कोड की उपस्थिति की रिपोर्ट करता है।

एक बार एक इनपुट डिवाइस को टच डिवाइस के रूप में वर्गीकृत किया गया है, डिवाइस के लिए वर्चुअल कुंजी मैप फ़ाइल लोड करने का प्रयास करके वर्चुअल कुंजियों की उपस्थिति निर्धारित की जाती है। यदि वर्चुअल कुंजी मैप उपलब्ध है, तो डिवाइस के लिए कुंजी लेआउट फ़ाइल भी लोड हो जाती है।

वर्चुअल कुंजी मानचित्र फ़ाइलों के स्थान और स्वरूप के बारे में नीचे दिए गए अनुभाग का संदर्भ लें।

अगला, सिस्टम टच डिवाइस के लिए इनपुट डिवाइस कॉन्फ़िगरेशन फ़ाइल लोड करता है।

सभी अंतर्निर्मित स्पर्श उपकरणों में इनपुट डिवाइस कॉन्फ़िगरेशन फ़ाइलें होनी चाहिए। यदि कोई इनपुट डिवाइस कॉन्फ़िगरेशन फ़ाइल मौजूद नहीं है, तो सिस्टम एक डिफ़ॉल्ट कॉन्फ़िगरेशन का चयन करेगा जो विशिष्ट सामान्य-उद्देश्य स्पर्श बाह्य उपकरणों जैसे कि बाहरी USB या ब्लूटूथ HID टच स्क्रीन या टच पैड के लिए उपयुक्त है। ये डिफॉल्ट्स बिल्ट-इन टच स्क्रीन के लिए डिज़ाइन नहीं किए गए हैं और इसके परिणामस्वरूप गलत व्यवहार होने की संभावना है।

इनपुट डिवाइस कॉन्फ़िगरेशन लोड होने के बाद, सिस्टम इनपुट डिवाइस को टच स्क्रीन , टच पैड या पॉइंटर डिवाइस के रूप में वर्गीकृत करेगा।

  • टच स्क्रीन डिवाइस का उपयोग स्क्रीन पर वस्तुओं के प्रत्यक्ष हेरफेर के लिए किया जाता है। चूंकि उपयोगकर्ता सीधे स्क्रीन को छू रहा है, इसलिए सिस्टम को वस्तुओं को हेरफेर करने के लिए इंगित करने के लिए किसी अतिरिक्त खर्च की आवश्यकता नहीं है।

  • किसी दिए गए सेंसर क्षेत्र पर स्पर्श के बारे में किसी एप्लिकेशन को पूर्ण स्थिति जानकारी प्रदान करने के लिए एक टच पैड डिवाइस का उपयोग किया जाता है। यह डिजिटाइज़र टैबलेट के लिए उपयोगी हो सकता है।

  • कर्सर का उपयोग करके स्क्रीन पर वस्तुओं के अप्रत्यक्ष हेरफेर के लिए एक पॉइंटर डिवाइस का उपयोग किया जाता है। उंगलियों की व्याख्या मल्टी-टच पॉइंटर जेस्चर के रूप में की जाती है। अन्य उपकरण, जैसे स्टाइलस, की निरपेक्ष स्थिति का उपयोग करके व्याख्या की जाती है।

    अधिक जानकारी के लिए अप्रत्यक्ष मल्टी-टच पॉइंटर जेस्चर देखें।

इनपुट डिवाइस को टच स्क्रीन , टच पैड या पॉइंटर डिवाइस के रूप में वर्गीकृत करने के लिए निम्नलिखित नियमों का उपयोग किया जाता है।

  • अगर touch.deviceType प्रॉपर्टी सेट है, तो डिवाइस का प्रकार संकेत के अनुसार सेट किया जाएगा।

  • यदि इनपुट डिवाइस INPUT_PROP_DIRECT इनपुट प्रॉपर्टी ( EVIOCGPROP ioctl के माध्यम से) की उपस्थिति की रिपोर्ट करता है, तो डिवाइस प्रकार टच स्क्रीन पर सेट हो जाएगा। यह स्थिति मानती है कि डायरेक्ट इनपुट टच डिवाइस एक डिस्प्ले से जुड़े होते हैं जो कनेक्टेड भी होता है।

  • यदि इनपुट डिवाइस INPUT_PROP_POINTER इनपुट प्रॉपर्टी ( EVIOCGPROP ioctl के माध्यम से) की उपस्थिति की रिपोर्ट करता है, तो डिवाइस प्रकार पॉइंटर पर सेट हो जाएगा।

  • यदि इनपुट डिवाइस REL_X या REL_Y सापेक्ष अक्षों की उपस्थिति की रिपोर्ट करता है, तो डिवाइस प्रकार को टच पैड पर सेट किया जाएगा। यह स्थिति उन इनपुट उपकरणों के लिए एक अस्पष्टता को हल करती है जिसमें माउस और टच पैड दोनों शामिल होते हैं। इस स्थिति में, पॉइंटर को नियंत्रित करने के लिए टच पैड का उपयोग नहीं किया जाएगा क्योंकि माउस पहले से ही इसे नियंत्रित करता है।

  • अन्यथा, डिवाइस प्रकार पॉइंटर पर सेट हो जाएगा। यह डिफ़ॉल्ट सुनिश्चित करता है कि टच पैड जिन्हें किसी अन्य विशेष उद्देश्य के लिए नामित नहीं किया गया है, पॉइंटर को नियंत्रित करने के लिए काम करेंगे।

बटन

बटन वैकल्पिक नियंत्रण हैं जिनका उपयोग अनुप्रयोगों द्वारा अतिरिक्त कार्य करने के लिए किया जा सकता है। टच डिवाइस पर बटन माउस बटन के समान व्यवहार करते हैं और मुख्य रूप से पॉइंटर टाइप टच डिवाइस या स्टाइलस के साथ उपयोग किए जाते हैं।

निम्नलिखित बटन समर्थित हैं:

  • BTN_LEFT : MotionEvent.BUTTON_PRIMARY के लिए मैप किया गया।

  • BTN_RIGHT : MotionEvent.BUTTON_SECONDARY के लिए मैप किया गया।

  • BTN_MIDDLE : MotionEvent.BUTTON_MIDDLE के लिए मैप किया गया।

  • BTN_BACK और BTN_SIDE : MotionEvent.BUTTON_BACK पर मैप किया गया। इस बटन को दबाने से कुंजी कोड KeyEvent.KEYCODE_BACK के साथ कुंजी दबाना भी संश्लेषित होता है।

  • BTN_FORWARD और BTN_EXTRA : MotionEvent.BUTTON_FORWARD के लिए मैप किया गया। इस बटन को दबाने से कुंजी कोड KeyEvent.KEYCODE_FORWARD के साथ कुंजी दबाने का संश्लेषण भी होता है।

  • BTN_STYLUS : MotionEvent.BUTTON_SECONDARY के लिए मैप किया गया।

  • BTN_STYLUS2 : MotionEvent.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 में मैप किया गया।

होवरिंग बनाम टचिंग टूल्स

उपकरण या तो टच डिवाइस के संपर्क में हो सकते हैं या रेंज में और उसके ऊपर होवर कर सकते हैं। सभी टच डिवाइस टच डिवाइस के ऊपर मंडराने वाले टूल की उपस्थिति को महसूस करने में सक्षम नहीं हैं। जो ऐसा करते हैं, जैसे कि आरएफ-आधारित स्टाइलस डिजिटाइज़र, अक्सर यह पता लगा सकते हैं कि उपकरण डिजिटाइज़र की सीमित सीमा के भीतर कब है।

InputReader घटक स्पर्श करने वाले उपकरणों को होवरिंग टूल से अलग करने का ध्यान रखता है। इसी तरह, टचिंग टूल्स और होवरिंग टूल्स को अलग-अलग तरीकों से एप्लिकेशन को रिपोर्ट किया जाता है।

टचिंग टूल को MotionEvent.ACTION_DOWN , MotionEvent.ACTION_MOVE , MotionEvent.ACTION_DOWN , MotionEvent.ACTION_POINTER_DOWN और MotionEvent.ACTION_POINTER_UP का उपयोग करके स्पर्श ईवेंट के रूप में एप्लिकेशन को रिपोर्ट किया जाता है।

मोशनइवेंट.ACTION_HOVER_ENTER , MotionEvent.ACTION_HOVER_MOVE और MotionEvent.ACTION_HOVER_EXIT का उपयोग करके MotionEvent.ACTION_HOVER_ENTER टूल को अनुप्रयोगों को सामान्य गति ईवेंट के रूप में रिपोर्ट किया जाता है।

डिवाइस ड्राइवर आवश्यकताएँ स्पर्श करें

  1. टच डिवाइस ड्राइवरों को केवल उन अक्षों और बटनों के लिए अक्षों और कुंजी कोडों को पंजीकृत करना चाहिए जिनका वे वास्तव में समर्थन करते हैं। अतिरिक्त कुल्हाड़ियों या कुंजी कोड को पंजीकृत करने से डिवाइस वर्गीकरण एल्गोरिथ्म भ्रमित हो सकता है या सिस्टम को डिवाइस की क्षमताओं का गलत पता लगाने का कारण बन सकता है।

    उदाहरण के लिए, यदि डिवाइस BTN_TOUCH कुंजी कोड की रिपोर्ट करता है, तो सिस्टम मान लेगा कि BTN_TOUCH का उपयोग हमेशा यह इंगित करने के लिए किया जाएगा कि उपकरण वास्तव में स्क्रीन को छू रहा है या नहीं। इसलिए, BTN_TOUCH का उपयोग यह इंगित करने के लिए नहीं किया जाना चाहिए कि उपकरण केवल सीमा और होवरिंग में है।

  2. सिंगल-टच डिवाइस निम्नलिखित लिनक्स इनपुट इवेंट्स का उपयोग करते हैं:

    • ABS_X : (आवश्यक) उपकरण के X निर्देशांक की रिपोर्ट करता है।

    • ABS_Y : (आवश्यक) उपकरण के Y निर्देशांक की रिपोर्ट करता है।

    • ABS_PRESSURE : (वैकल्पिक) उपकरण की नोक पर लागू भौतिक दबाव या स्पर्श संपर्क की सिग्नल शक्ति की रिपोर्ट करता है।

    • ABS_TOOL_WIDTH : (वैकल्पिक) स्पर्श संपर्क या उपकरण के क्रॉस-सेक्शनल क्षेत्र या चौड़ाई की रिपोर्ट करता है।

    • ABS_DISTANCE : (वैकल्पिक) टच डिवाइस की सतह से टूल की दूरी की रिपोर्ट करता है।

    • ABS_TILT_X : (वैकल्पिक) एक्स अक्ष के साथ स्पर्श डिवाइस की सतह से उपकरण के झुकाव की रिपोर्ट करता है।

    • ABS_TILT_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_DOUBLETAP , BTN_TOOL_TRIPLETAP , BTN_TOOL_QUADTAP टूल टाइप करें : (वैकल्पिक) रिपोर्ट टाइप करें।

  3. मल्टी-टच डिवाइस निम्नलिखित लिनक्स इनपुट इवेंट्स का उपयोग करते हैं:

    • 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 : (वैकल्पिक) लिनक्स मल्टी-टच प्रोटोकॉल 'बी' का उपयोग करते समय, टूल की स्लॉट आईडी की रिपोर्ट करता है। अधिक विवरण के लिए 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_DOUBLETAP , BTN_TOOL_TRIPLETAP , BTN_TOOL_QUADTAP टूल टाइप करें : (वैकल्पिक) रिपोर्ट टाइप करें।

  4. यदि सिंगल-टच और मल्टी-टच प्रोटोकॉल दोनों के लिए एक्सिस परिभाषित हैं, तो केवल मल्टी-टच एक्सिस का उपयोग किया जाएगा और सिंगल-टच एक्सिस को अनदेखा कर दिया जाएगा।

  5. 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)।

    क्लैम्पिंग टच निर्देशांक डिस्प्ले के किनारे पर स्क्रीन के किनारे के चारों ओर एक कृत्रिम कठोर सीमा बनाता है जो सिस्टम को सुचारू रूप से ट्रैकिंग गति से रोकता है जो डिस्प्ले क्षेत्र की सीमा में प्रवेश या बाहर निकलता है।

  6. ABS_PRESSURE या ABS_MT_PRESSURE द्वारा रिपोर्ट किए गए मान, यदि वे बिल्कुल भी रिपोर्ट किए जाते हैं, तो टूल डिवाइस को छूने पर गैर-शून्य होना चाहिए और शून्य अन्यथा यह इंगित करने के लिए कि टूल होवर कर रहा है।

    दबाव की जानकारी देना वैकल्पिक है लेकिन इसकी पुरजोर सिफारिश की जाती है। अनुप्रयोग दबाव-संवेदनशील ड्राइंग और अन्य प्रभावों को लागू करने के लिए दबाव की जानकारी का उपयोग कर सकते हैं।

  7. ABS_TOOL_WIDTH , ABS_MT_TOUCH_MAJOR , ABS_MT_TOUCH_MINOR , ABS_MT_WIDTH_MAJOR , या ABS_MT_WIDTH_MINOR द्वारा ABS_TOOL_WIDTH गए मान गैर-शून्य होने चाहिए जब उपकरण डिवाइस को छू रहा हो और अन्यथा शून्य होना चाहिए, लेकिन यह आवश्यक नहीं है। उदाहरण के लिए, टच डिवाइस फिंगर टच कॉन्टैक्ट्स के आकार को मापने में सक्षम हो सकता है लेकिन स्टाइलस टच कॉन्टैक्ट्स को नहीं।

    रिपोर्टिंग आकार की जानकारी वैकल्पिक है लेकिन दृढ़ता से अनुशंसा की जाती है। अनुप्रयोग आकार-संवेदनशील ड्राइंग और अन्य प्रभावों को लागू करने के लिए दबाव की जानकारी का उपयोग कर सकते हैं।

  8. जब उपकरण डिवाइस को स्पर्श कर रहा हो तो ABS_DISTANCE या ABS_MT_DISTANCE द्वारा रिपोर्ट किए गए मान शून्य तक पहुंच जाने चाहिए। उपकरण के सीधे संपर्क में होने पर भी दूरी गैर-शून्य रह सकती है। रिपोर्ट किए गए सटीक मान उस तरीके पर निर्भर करते हैं जिससे हार्डवेयर दूरी को मापता है।

    रिपोर्टिंग दूरी की जानकारी वैकल्पिक है लेकिन स्टाइलस उपकरणों के लिए अनुशंसित है।

  9. उपकरण के लंबवत होने पर ABS_TILT_X और ABS_TILT_Y द्वारा रिपोर्ट किए गए मान शून्य होने चाहिए। एक गैर-शून्य झुकाव को एक संकेत के रूप में लिया जाता है कि उपकरण एक झुका हुआ है।

    एक्स और वाई कुल्हाड़ियों के साथ झुकाव कोणों को लंबवत से डिग्री में निर्दिष्ट माना जाता है। प्रत्येक धुरी के लिए केंद्र बिंदु (पूरी तरह लंबवत) द्वारा दिया गया है (max + min) / 2 । केंद्र बिंदु से छोटे मान ऊपर या बाईं ओर झुकाव का प्रतिनिधित्व करते हैं, केंद्र बिंदु से बड़े मान नीचे या दाईं ओर झुकाव का प्रतिनिधित्व करते हैं।

    InputReader X और Y झुकाव घटकों को 0 से PI / 2 रेडियन तक के लंबवत झुकाव कोण और -PI से PI रेडियन तक के समतलीय अभिविन्यास कोण में परिवर्तित करता है। इस प्रतिनिधित्व के परिणामस्वरूप अभिविन्यास का वर्णन होता है जो उंगलियों के स्पर्श का वर्णन करने के लिए उपयोग किए जाने वाले के साथ संगत है।

    झुकाव की जानकारी की रिपोर्ट करना वैकल्पिक है, लेकिन स्टाइलस डिवाइस के लिए इसका सुझाव दिया जाता है.

  10. यदि उपकरण प्रकार ABS_MT_TOOL_TYPE द्वारा रिपोर्ट किया गया है, तो यह BTN_TOOL_* द्वारा रिपोर्ट की गई किसी भी उपकरण प्रकार की जानकारी को प्रतिस्थापित कर देगा। यदि कोई उपकरण प्रकार की जानकारी बिल्कुल भी उपलब्ध नहीं है, तो उपकरण प्रकार डिफ़ॉल्ट रूप से MotionEvent.TOOL_TYPE_FINGER होता है।

  11. एक उपकरण निम्नलिखित स्थितियों के आधार पर सक्रिय होने के लिए निर्धारित किया जाता है:

    • सिंगल-टच प्रोटोकॉल का उपयोग करते समय, उपकरण सक्रिय होता है यदि BTN_TOUCH , या BTN_TOOL_* 1 है।

      इस स्थिति का अर्थ है कि InputReader को उपकरण की प्रकृति के बारे में कम से कम कुछ जानकारी होनी चाहिए, चाहे वह स्पर्श कर रहा हो, या कम से कम इसका उपकरण प्रकार। यदि कोई जानकारी उपलब्ध नहीं है, तो उपकरण को निष्क्रिय (सीमा से बाहर) माना जाता है।

    • मल्टी-टच प्रोटोकॉल 'ए' का उपयोग करते समय, टूल तब भी सक्रिय होता है जब यह नवीनतम सिंक रिपोर्ट में दिखाई देता है। जब टूल सिंक रिपोर्ट में दिखाई देना बंद हो जाता है, तो इसका अस्तित्व समाप्त हो जाता है।

    • मल्टी-टच प्रोटोकॉल 'बी' का उपयोग करते समय, टूल तब तक सक्रिय रहता है जब तक उसमें एक सक्रिय स्लॉट होता है। जब यह स्लॉट साफ हो जाता है, तो टूल मौजूद नहीं रहता है।

  12. निम्नलिखित स्थितियों के आधार पर एक उपकरण को होवर करने के लिए निर्धारित किया जाता है:

    • यदि उपकरण BTN_TOOL_MOUSE या BTN_TOOL_LENS है, तो उपकरण होवर नहीं कर रहा है, भले ही निम्न में से कोई भी स्थिति सत्य हो।

    • यदि उपकरण सक्रिय है और चालक दबाव की सूचना देता है, और रिपोर्ट किया गया दबाव शून्य है, तो उपकरण मँडरा रहा है।

    • यदि उपकरण सक्रिय है और ड्राइवर BTN_TOUCH कुंजी कोड का समर्थन करता है और BTN_TOUCH का मान शून्य है, तो उपकरण मँडरा रहा है।

  13. InputReader मल्टी-टच प्रोटोकॉल 'ए' और 'बी' दोनों का समर्थन करता है। नए ड्राइवरों को 'बी' प्रोटोकॉल का इस्तेमाल करना चाहिए लेकिन दोनों में से कोई एक काम करेगा।

  14. Android Ice Cream Sandwich 4.0 के अनुसार, Linux इनपुट प्रोटोकॉल विनिर्देशन के अनुपालन के लिए टच स्क्रीन ड्राइवरों को बदलने की आवश्यकता हो सकती है।

    निम्नलिखित परिवर्तनों की आवश्यकता हो सकती है:

    • जब कोई टूल निष्क्रिय हो जाता है (उंगली "ऊपर" जाती है), तो उसे बाद की मल्टी-टच सिंक रिपोर्ट में दिखाई देना बंद हो जाना चाहिए। जब सभी उपकरण निष्क्रिय हो जाते हैं (सभी उंगलियां "ऊपर" जाती हैं), तो ड्राइवर को एक खाली सिंक रिपोर्ट पैकेट भेजना चाहिए, जैसे कि SYN_MT_REPORT और उसके बाद SYN_REPORT

      Android के पिछले संस्करणों में 0 का दबाव मान भेजकर "अप" ईवेंट की रिपोर्ट किए जाने की उम्मीद थी। पुराना व्यवहार Linux इनपुट प्रोटोकॉल विनिर्देश के साथ असंगत था और अब समर्थित नहीं है।

    • शारीरिक दबाव या सिग्नल की शक्ति की जानकारी ABS_MT_PRESSURE का उपयोग करके रिपोर्ट की जानी चाहिए।

      Android के पिछले संस्करणों ने ABS_MT_TOUCH_MAJOR से दबाव की जानकारी प्राप्त की। पुराना व्यवहार Linux इनपुट प्रोटोकॉल विनिर्देश के साथ असंगत था और अब समर्थित नहीं है।

    • स्पर्श आकार की जानकारी ABS_MT_TOUCH_MAJOR का उपयोग करके रिपोर्ट की जानी चाहिए।

      Android के पिछले संस्करणों ने ABS_MT_TOOL_MAJOR से आकार की जानकारी प्राप्त की। पुराना व्यवहार Linux इनपुट प्रोटोकॉल विनिर्देश के साथ असंगत था और अब समर्थित नहीं है।

    टच डिवाइस ड्राइवरों को अब Android-विशिष्ट अनुकूलन की आवश्यकता नहीं है। मानक लिनक्स इनपुट प्रोटोकॉल पर भरोसा करके, एंड्रॉइड स्पर्श बाह्य उपकरणों की एक विस्तृत विविधता का समर्थन कर सकता है, जैसे बाहरी एचआईडी मल्टी-टच टच स्क्रीन, असम्बद्ध ड्राइवरों का उपयोग करके।

टच डिवाइस ऑपरेशन

निम्नलिखित Android पर टच डिवाइस ऑपरेशन का एक संक्षिप्त सारांश है।

  1. EventHub , evdev ड्राइवर से अपरिष्कृत ईवेंट पढ़ता है।

  2. InputReader कच्ची घटनाओं का उपभोग करता है और प्रत्येक उपकरण की स्थिति और अन्य विशेषताओं के बारे में आंतरिक स्थिति को अद्यतन करता है। यह बटन स्टेट्स को भी ट्रैक करता है।

  3. यदि BACK या FORWARD बटन दबाए या जारी किए गए थे, तो InputReader InputDispatcher को प्रमुख घटना के बारे में सूचित करता है।

  4. InputReader यह निर्धारित करता है कि वर्चुअल कुंजी प्रेस हुई है या नहीं। यदि ऐसा है, तो यह InputDispatcher को प्रमुख ईवेंट के बारे में सूचित करता है।

  5. InputReader यह निर्धारित करता है कि स्पर्श प्रदर्शन की सीमा के भीतर शुरू किया गया था या नहीं। यदि ऐसा है, तो यह InputDispatcher को स्पर्श घटना के बारे में सूचित करता है।

  6. यदि कोई टचिंग टूल नहीं है, लेकिन कम से कम एक होवरिंग टूल है, तो InputReader हॉवर इवेंट के बारे में InputDispatcher को सूचित करता है।

  7. यदि टच डिवाइस प्रकार पॉइंटर है, तो InputReader पॉइंटर जेस्चर डिटेक्शन करता है, पॉइंटर और स्पॉट को तदनुसार ले जाता है और पॉइंटर ईवेंट के बारे में InputDispatcher को सूचित करता है।

  8. InputDispatcher WindowManagerPolicy उपयोग यह निर्धारित करने के लिए करता है कि क्या ईवेंट भेजे जाने चाहिए और क्या उन्हें डिवाइस को सक्रिय करना चाहिए। उसके बाद, 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
कच्ची धुरी की सटीकता। उदा. फ़ज़ = 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 है, तो सिस्टम स्वचालित रूप से वर्गीकरण एल्गोरिथम के अनुसार डिवाइस प्रकार का पता लगाता है।

डिवाइस प्रकार स्पर्श डिवाइस के व्यवहार को कैसे प्रभावित करता है, इसके बारे में अधिक विवरण के लिए वर्गीकरण अनुभाग देखें।

हनीकॉम्ब से पहले, सभी टच डिवाइस को टच स्क्रीन माना जाता था।

touch.orientationAware

परिभाषा: touch.orientationAware = 0 | 1

निर्दिष्ट करता है कि स्पर्श डिवाइस को अभिविन्यास परिवर्तनों को प्रदर्शित करने के लिए प्रतिक्रिया करनी चाहिए या नहीं।

  • यदि मान 1 है, तो टच डिवाइस द्वारा रिपोर्ट की गई टच पोजीशन को तब घुमाया जाता है जब डिस्प्ले ओरिएंटेशन बदलता है।

  • यदि मान 0 है, तो स्पर्श डिवाइस द्वारा रिपोर्ट की गई स्पर्श स्थिति अभिविन्यास परिवर्तनों को प्रदर्शित करने के लिए प्रतिरोधी होती है।

यदि डिवाइस एक टच स्क्रीन है, तो डिफ़ॉल्ट मान 1 है, अन्यथा 0

सिस्टम आंतरिक और बाहरी टच स्क्रीन और डिस्प्ले के बीच अंतर करता है। आंतरिक प्रदर्शन के उन्मुखीकरण के आधार पर एक ओरिएंटेशन जागरूक आंतरिक टच स्क्रीन को घुमाया जाता है। एक ओरिएंटेशन जागरूक बाहरी टच स्क्रीन को बाहरी डिस्प्ले के ओरिएंटेशन के आधार पर घुमाया जाता है।

नेक्सस वन जैसे उपकरणों पर टच स्क्रीन के रोटेशन का समर्थन करने के लिए ओरिएंटेशन जागरूकता का उपयोग किया जाता है। उदाहरण के लिए, जब डिवाइस को उसके प्राकृतिक अभिविन्यास से 90 डिग्री दक्षिणावर्त घुमाया जाता है, तो स्पर्श की पूर्ण स्थिति को इस तरह से रीमैप किया जाता है कि टच स्क्रीन के ऊपरी-बाएँ कोने में एक स्पर्श को शीर्ष-बाएँ में स्पर्श के रूप में सूचित किया जाता है डिस्प्ले के रोटेट कोऑर्डिनेट सिस्टम का कोना। ऐसा इसलिए किया जाता है ताकि स्पर्शों को उसी समन्वय प्रणाली के साथ रिपोर्ट किया जा सके जिसका उपयोग अनुप्रयोग अपने दृश्य तत्वों को आकर्षित करने के लिए करते हैं।

मधुकोश से पहले, सभी स्पर्श उपकरणों को उन्मुखीकरण से अवगत माना जाता था।

touch.gestureMode

परिभाषा: touch.gestureMode = pointer | spots | default

सूचक इशारों के लिए प्रस्तुति मोड निर्दिष्ट करता है। यह कॉन्फ़िगरेशन गुण केवल तभी प्रासंगिक होता है जब टच डिवाइस पॉइंटर प्रकार का हो।

  • यदि मान pointer है, तो टच पैड जेस्चर को माउस पॉइंटर के समान कर्सर के माध्यम से प्रस्तुत किया जाता है।

  • यदि मान spots है, तो टच पैड जेस्चर एक एंकर द्वारा प्रस्तुत किया जाता है जो जेस्चर के केंद्रक का प्रतिनिधित्व करता है और गोलाकार स्पॉट का एक सेट होता है जो अलग-अलग उंगलियों की स्थिति का प्रतिनिधित्व करता है।

INPUT_PROP_SEMI_MT इनपुट गुण सेट होने पर, या अन्यथा spots होने पर डिफ़ॉल्ट मान pointer होता है।

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 , Size फील्ड्स

TouchMajor और TouchMinor फ़ील्ड आउटपुट इकाइयों (पिक्सेल) में संपर्क क्षेत्र के अनुमानित आयामों का वर्णन करते हैं।

ToolMajor और ToolMinor फ़ील्ड आउटपुट इकाइयों (पिक्सेल) में ही टूल के अनुमानित आयामों का वर्णन करते हैं।

Size फ़ील्ड स्पर्श के सामान्यीकृत आकार का वर्णन करता है जो स्पर्श उपकरण द्वारा समझे जा सकने वाले सबसे बड़े संभव स्पर्श से संबंधित है। सबसे छोटा संभावित सामान्यीकृत आकार 0.0 है (कोई संपर्क नहीं है, या यह अमापनीय है), और सबसे बड़ा संभव सामान्यीकृत आकार 1.0 है (सेंसर क्षेत्र संतृप्त है)।

जब अनुमानित लंबाई और चौड़ाई दोनों को मापा जा सकता है, तो TouchMajor फ़ील्ड लंबे आयाम को निर्दिष्ट करती है और TouchMinor फ़ील्ड संपर्क क्षेत्र के छोटे आयाम को निर्दिष्ट करती है। जब संपर्क क्षेत्र का केवल अनुमानित व्यास ही मापा जा सकता है, तो TouchMajor और TouchMinor फ़ील्ड बराबर होंगे।

इसी तरह, ToolMajor फ़ील्ड लंबे आयाम को निर्दिष्ट करती है और ToolMinor फ़ील्ड टूल के क्रॉस-सेक्शनल क्षेत्र के छोटे आयाम को निर्दिष्ट करती है।

यदि स्पर्श आकार अनुपलब्ध है लेकिन उपकरण आकार उपलब्ध है, तो उपकरण आकार स्पर्श आकार के बराबर सेट किया जाएगा। इसके विपरीत, यदि उपकरण का आकार अनुपलब्ध है लेकिन स्पर्श का आकार उपलब्ध है, तो स्पर्श का आकार उपकरण के आकार के बराबर सेट किया जाएगा।

टच डिवाइस विभिन्न तरीकों से टच साइज और टूल साइज को मापते हैं या रिपोर्ट करते हैं। वर्तमान कार्यान्वयन तीन अलग-अलग प्रकार के मापों का समर्थन करता है: सतह इकाइयों में व्यास, क्षेत्र और ज्यामितीय बाउंडिंग बॉक्स।

touch.size.calibration

परिभाषा: 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 = <एक गैर-नकारात्मक फ़्लोटिंग पॉइंट नंबर>

अंशांकन में उपयोग किए जाने वाले निरंतर स्केल कारक को निर्दिष्ट करता है।

डिफ़ॉल्ट मान 1.0 है।

touch.size.bias

परिभाषा: touch.size.bias = <एक गैर-नकारात्मक फ्लोटिंग पॉइंट नंबर>

अंशांकन में उपयोग किए जाने वाले निरंतर पूर्वाग्रह मान को निर्दिष्ट करता है।

डिफ़ॉल्ट मान 0.0 है।

touch.size.isSummed

परिभाषा: touch.size.isSummed .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 क्षेत्र

Pressure क्षेत्र 0.0 (कोई स्पर्श नहीं) और 1.0 (पूर्ण बल) के बीच सामान्यीकृत मान के रूप में स्पर्श डिवाइस पर लागू अनुमानित भौतिक दबाव का वर्णन करता है।

एक शून्य दबाव इंगित करता है कि उपकरण मँडरा रहा है।

touch.pressure.calibration

परिभाषा: touch.pressure.calibration = none | physical | amplitude | default

दबाव की रिपोर्ट करने के लिए स्पर्श चालक द्वारा उपयोग किए जाने वाले माप को निर्दिष्ट करता है।

  • यदि मान none है, तो दबाव अज्ञात है इसलिए इसे स्पर्श करते समय 1.0 और मँडराते समय 0.0 पर सेट किया जाता है।

  • यदि मान physical है, तो दबाव अक्ष को टच पैड पर लागू दबाव की वास्तविक भौतिक तीव्रता को मापने के लिए माना जाता है।

  • If the value is amplitude , the pressure axis is assumed to measure the signal amplitude, which is related to the size of the contact and the pressure applied.

  • If the value is default , the system uses the physical calibration if the pressure axis available, otherwise uses none .

touch.pressure.scale

Definition: touch.pressure.scale = <a non-negative floating point number>

Specifies a constant scale factor used in the calibration.

The default value is 1.0 / raw.pressure.max .

Calculation

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 may 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 of raw.orientation.min maps to -PI/2 and a raw value of raw.orientation.max maps to PI/2 . The center value of (raw.orientation.min + raw.orientation.max) / 2 maps to 0 .

  • 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 the interpolated calibration if the orientation axis available, otherwise uses none .

Calculation

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 the scaled calibration if the distance axis available, otherwise uses none .

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 .

Calculation

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

Example

# 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 will 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 may also need to be updated.

Virtual Key Map Files

Touch devices are often 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 ).

Syntax

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 be 0x01 .
  • <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 .

Example

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:

  1. Single finger tap: click.

  2. Single finger motion: move the pointer.

  3. Single finger motion plus button presses: drag the pointer.

  4. 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.

  5. 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.

  6. Multiple finger motion: freeform gesture.

Palm rejection

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 edge of the display 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_UP and FLAG_CANCELED set.
  • (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

  1. In your touch driver, use the input_abs_set_res macro 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_MINOR is optional. However, if your device does support it, make sure the resolution is set correctly.

  2. To confirm the fields are set correctly, run:
        $ adb shell getevent -li
    
  3. To enable the feature during runtime, run:
        $ adb shell device_config put input_native_boot palm_rejection_enabled 1
    
  4. Restart the system_server process.
         $ adb shell stop && adb shell start
        
  5. Confirm that adb shell dumpsys input shows that there are palm rejectors inside UnwantedInteractionBlocker . 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: {}
    
  6. To permanently enable the feature, add the corresponding sysprop command in your init**rc file:

    setprop persist.device_config.input_native_boot.palm_rejection_enabled 1
    

Further Reading

  1. Linux multi-touch protocol
  2. ENAC list of available multitouch devices on Linux