Android, कई तरह की टच स्क्रीन और टच पैड के साथ काम करता है. इनमें स्टाइलस वाले डिजिटाइज़र टैबलेट भी शामिल हैं.
टच स्क्रीन, टच डिवाइस होती हैं. ये डिसप्ले से जुड़ी होती हैं, ताकि उपयोगकर्ता को ऐसा लगे कि वह सीधे तौर पर स्क्रीन पर मौजूद आइटम में बदलाव कर रहा है.
टच पैड ऐसे टच डिवाइस होते हैं जो डिसप्ले से जुड़े नहीं होते. जैसे, डिजिटाइज़र टैबलेट. आम तौर पर, टच पैड का इस्तेमाल पॉइंट करने या यूज़र इंटरफ़ेस को जेस्चर से कंट्रोल करने के लिए किया जाता है.
टच डिवाइसों में ऐसे बटन हो सकते हैं जिनके फ़ंक्शन, माउस के बटन के फ़ंक्शन से मिलते-जुलते हों.
टच डिवाइसों को कभी-कभी अलग-अलग टूल का इस्तेमाल करके कंट्रोल किया जा सकता है. जैसे, उंगलियां या स्टाइलस. यह इस बात पर निर्भर करता है कि डिवाइस में किस तरह की टच सेंसर टेक्नोलॉजी का इस्तेमाल किया गया है.
टच डिवाइसों का इस्तेमाल कभी-कभी वर्चुअल बटन लागू करने के लिए किया जाता है. उदाहरण के लिए, कुछ Android डिवाइसों पर, टच स्क्रीन सेंसर का एरिया डिसप्ले के किनारे से आगे तक फैला होता है. साथ ही, यह टच सेंसिटिव की-पैड के तौर पर भी काम करता है.
टच डिवाइसों की अलग-अलग वैरायटी की वजह से, Android को कॉन्फ़िगरेशन प्रॉपर्टी की बड़ी संख्या पर निर्भर रहना पड़ता है. इससे हर डिवाइस की विशेषताओं और उसके काम करने के तरीके के बारे में जानकारी मिलती है.
टच डिवाइस की कैटगरी
किसी इनपुट डिवाइस को मल्टी-टच डिवाइस के तौर पर तब क्लासिफ़ाई किया जाता है, जब ये दोनों शर्तें पूरी होती हैं:
- इनपुट डिवाइस,
ABS_MT_POSITION_X
औरABS_MT_POSITION_Y
ऐब्सलूट ऐक्सिस के मौजूद होने की जानकारी देता है. - इनपुट डिवाइस में कोई गेमपैड बटन नहीं है. इस शर्त से, कुछ गेमपैड के साथ होने वाली समस्या हल हो जाती है. ये गेमपैड, MT ऐक्सिस के कोड के साथ ओवरलैप करने वाले कोड के साथ ऐक्सिस की जानकारी देते हैं.
किसी इनपुट डिवाइस को सिंगल-टच डिवाइस के तौर पर तब क्लासिफ़ाई किया जाता है, जब ये दोनों शर्तें पूरी होती हों:
- इनपुट डिवाइस को मल्टी-टच डिवाइस के तौर पर क्लासिफ़ाई नहीं किया गया है. इनपुट डिवाइस को सिंगल-टच डिवाइस या मल्टी-टच डिवाइस के तौर पर क्लासिफ़ाई किया जाता है.
- इनपुट डिवाइस,
ABS_X
औरABS_Y
ऐब्सलूट ऐक्सिस के साथ-साथBTN_TOUCH
कुंजी कोड के मौजूद होने की जानकारी देता है.
जब किसी इनपुट डिवाइस को टच डिवाइस के तौर पर क्लासिफ़ाई किया जाता है, तब वर्चुअल कुंजियों की मौजूदगी का पता लगाने के लिए, डिवाइस के लिए वर्चुअल कुंजी मैप फ़ाइल लोड करने की कोशिश की जाती है. अगर वर्चुअल कीबोर्ड का मैप उपलब्ध है, तो डिवाइस के लिए कीबोर्ड लेआउट फ़ाइल भी लोड हो जाती है. इन फ़ाइलों की जगह और फ़ॉर्मैट के बारे में जानकारी पाने के लिए, [वर्चुअल की मैप फ़ाइलें](#virtual-key-map-files) देखें.
इसके बाद, सिस्टम टच डिवाइस के लिए इनपुट डिवाइस कॉन्फ़िगरेशन फ़ाइल लोड करता है.
सभी बिल्ट-इन टच डिवाइसों में, इनपुट डिवाइस कॉन्फ़िगरेशन फ़ाइलें होनी चाहिए. अगर कोई इनपुट डिवाइस कॉन्फ़िगरेशन फ़ाइल मौजूद नहीं है, तो सिस्टम एक डिफ़ॉल्ट कॉन्फ़िगरेशन चुनता है. यह कॉन्फ़िगरेशन, सामान्य इस्तेमाल के लिए टच पेरिफ़ेरल के लिए सही होता है. जैसे, बाहरी यूएसबी या ब्लूटूथ एचआईडी टच स्क्रीन या टच पैड. ये डिफ़ॉल्ट सेटिंग, पहले से मौजूद टच स्क्रीन के लिए नहीं बनाई गई हैं. इसलिए, इनसे गलत नतीजे मिल सकते हैं.
इनपुट डिवाइस का कॉन्फ़िगरेशन लोड होने के बाद, सिस्टम इनपुट डिवाइस को टच स्क्रीन, टच पैड या पॉइंटर डिवाइस के तौर पर क्लासिफ़ाई करता है.
- टच स्क्रीन वाले डिवाइस का इस्तेमाल, स्क्रीन पर मौजूद ऑब्जेक्ट को सीधे तौर पर कंट्रोल करने के लिए किया जाता है. उपयोगकर्ता सीधे तौर पर स्क्रीन को छूता है. इसलिए, सिस्टम को यह बताने के लिए किसी अन्य सुविधा की ज़रूरत नहीं होती कि किन ऑब्जेक्ट में बदलाव किया जा रहा है.
- टच पैड डिवाइस का इस्तेमाल, किसी ऐप्लिकेशन को सेंसर के किसी हिस्से पर किए गए टच के बारे में सटीक जानकारी देने के लिए किया जाता है. यह डिजिटाइज़र टैबलेट के लिए काम का हो सकता है.
- पॉइंटर डिवाइस का इस्तेमाल, कर्सर की मदद से स्क्रीन पर मौजूद ऑब्जेक्ट में बदलाव करने के लिए किया जाता है. उंगलियों को मल्टी-टच पॉइंटर जेस्चर के तौर पर समझा जाता है. स्टाइलस जैसे अन्य टूल की जानकारी, ऐब्सलूट पोज़िशन का इस्तेमाल करके दी जाती है. ज़्यादा जानकारी के लिए, इनडायरेक्ट मल्टी-टच पॉइंटर के जेस्चर देखें.
इनपुट डिवाइस को टच स्क्रीन, टच पैड या पॉइंटर डिवाइस के तौर पर क्लासिफ़ाई करने के लिए, इन नियमों का इस्तेमाल किया जाता है.
- अगर
touch.deviceType
प्रॉपर्टी सेट की जाती है, तो डिवाइस टाइप को सेट किए गए टाइप के तौर पर सेट किया जाता है. - अगर इनपुट डिवाइस,
EVIOCGPROP
ioctl के ज़रिएINPUT_PROP_DIRECT
इनपुट प्रॉपर्टी की मौजूदगी की रिपोर्ट करता है, तो डिवाइस टाइप को टच स्क्रीन पर सेट किया जाता है. इस शर्त में यह माना जाता है कि डायरेक्ट इनपुट टच डिवाइस, कनेक्ट किए गए डिसप्ले से अटैच हैं. - अगर इनपुट डिवाइस,
EVIOCGPROP
ioctl के ज़रिएINPUT_PROP_POINTER
इनपुट प्रॉपर्टी की मौजूदगी की रिपोर्ट करता है, तो डिवाइस टाइप को pointer पर सेट किया जाता है. - अगर इनपुट डिवाइस,
REL_X
याREL_Y
रिलेटिव ऐक्सिस की मौजूदगी की रिपोर्ट करता है, तो डिवाइस का टाइप टच पैड पर सेट होता है. यह शर्त, इनपुट डिवाइसों के लिए अस्पष्टता को दूर करती है. इन डिवाइसों में माउस और टच पैड, दोनों शामिल होते हैं. इस मामले में, पॉइंटर को कंट्रोल करने के लिए टच पैड का इस्तेमाल नहीं किया जाता, क्योंकि माउस पहले से ही इसे कंट्रोल करता है. - ऐसा न होने पर, डिवाइस टाइप को pointer पर सेट किया जाता है. इस डिफ़ॉल्ट सेटिंग से यह पक्का होता है कि जिन टच पैड को किसी अन्य खास मकसद के लिए इस्तेमाल नहीं किया गया है वे पॉइंटर को कंट्रोल करते हैं.
बटन
बटन, ज़रूरी नहीं होते हैं. ऐप्लिकेशन इनका इस्तेमाल अतिरिक्त फ़ंक्शन करने के लिए कर सकते हैं. टच डिवाइसों पर मौजूद बटन, माउस के बटन की तरह काम करते हैं. इनका इस्तेमाल मुख्य रूप से, पॉइंटर टाइप के टच डिवाइसों या स्टाइलस के साथ किया जाता है.
इन बटन का इस्तेमाल किया जा सकता है:
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
एपीआई में, टूल को अक्सर पॉइंटर कहा जाता है.
इन टूल टाइप के साथ काम करता है:
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
का इस्तेमाल किया जाता है.
होवर करने वाले टूल को ऐप्लिकेशन में, सामान्य मोशन इवेंट के तौर पर रिपोर्ट किया जाता है. इसके लिए, MotionEvent.ACTION_HOVER_ENTER
, MotionEvent.ACTION_HOVER_MOVE
, और MotionEvent.ACTION_HOVER_EXIT
का इस्तेमाल किया जाता है.
टच डिवाइस के ड्राइवर से जुड़ी ज़रूरी शर्तें
- टच डिवाइस के ड्राइवर को सिर्फ़ उन ऐक्सिस और की कोड को रजिस्टर करना चाहिए जिन्हें वह सपोर्ट करता है. ऐसे ऐक्सिस या कुंजी कोड रजिस्टर करने से डिवाइस क्लासिफ़िकेशन एल्गोरिदम भ्रमित हो सकता है या सिस्टम, डिवाइस की क्षमताओं का गलत तरीके से पता लगा सकता है. उदाहरण के लिए, अगर डिवाइस
BTN_TOUCH
कुंजी कोड की जानकारी देता है, तो सिस्टम यह मान लेता है किBTN_TOUCH
का इस्तेमाल हमेशा यह बताने के लिए किया जाता है कि टूल स्क्रीन को छू रहा है या नहीं. इसलिए,BTN_TOUCH
का इस्तेमाल यह दिखाने के लिए नहीं किया जाना चाहिए कि टूल सिर्फ़ रेंज में है और घूम रहा है. - सिंगल-टच डिवाइसों में, Linux के इनपुट इवेंट का इस्तेमाल किया जाता है:
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_DOUBLETAP
,BTN_TOOL_TRIPLETAP
,BTN_TOOL_QUADTAP
: (ज़रूरी नहीं) टूल टाइप की जानकारी देता है.
- मल्टी-टच डिवाइस, Linux के इन इनपुट इवेंट का इस्तेमाल करते हैं:
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 के मल्टी-टच प्रोटोकॉल '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_DOUBLETAP
,BTN_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
से मिलता है. सेंटर पॉइंट से कम वैल्यू का मतलब है कि इमेज ऊपर या बाईं ओर झुकी हुई है. वहीं, सेंटर पॉइंट से ज़्यादा वैल्यू का मतलब है कि इमेज नीचे या दाईं ओर झुकी हुई है.InputReader
, X और 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', दोनों के साथ काम करता है. नए ड्राइवर को 'B' प्रोटोकॉल का इस्तेमाल करना चाहिए. हालांकि, दोनों प्रोटोकॉल काम करते हैं.Android 4.0 के बाद के वर्शन में, टच स्क्रीन ड्राइवर को Linux इनपुट प्रोटोकॉल की ज़रूरी शर्तों के मुताबिक बदलना पड़ सकता है.
ये बदलाव करने पड़ सकते हैं:
जब कोई टूल इनऐक्टिव हो जाता है (उंगली "ऊपर" चली जाती है), तो वह मल्टी-टच सिंक की अगली रिपोर्ट में नहीं दिखना चाहिए. जब सभी टूल बंद हो जाते हैं (सभी उंगलियां "ऊपर" की ओर हो जाती हैं), तो ड्राइवर को सिंक रिपोर्ट का खाली पैकेट भेजना चाहिए. जैसे,
SYN_MT_REPORT
के बादSYN_REPORT
.Android के पिछले वर्शन में, "up" इवेंट की रिपोर्ट भेजने के लिए, दबाव की वैल्यू 0 भेजनी होती थी. पुरानी सुविधा, Linux इनपुट प्रोटोकॉल के स्पेसिफ़िकेशन के साथ काम नहीं करती थी. इसलिए, अब यह सुविधा उपलब्ध नहीं है.
फ़ोन पर दबाव पड़ने या सिग्नल की मज़बूती की जानकारी देने के लिए,
ABS_MT_PRESSURE
का इस्तेमाल करके रिपोर्ट करें.Android के पिछले वर्शन,
ABS_MT_TOUCH_MAJOR
से दबाव की जानकारी पाते थे. पुरानी सुविधा, Linux इनपुट प्रोटोकॉल के स्पेसिफ़िकेशन के साथ काम नहीं करती थी. इसलिए, अब यह सुविधा उपलब्ध नहीं है.- टच साइज़ की जानकारी देने के लिए,
ABS_MT_TOUCH_MAJOR
का इस्तेमाल किया जाना चाहिए.Android के पिछले वर्शन,
ABS_MT_TOOL_MAJOR
से साइज़ की जानकारी पाते थे. पुरानी सुविधा, Linux इनपुट प्रोटोकॉल के स्पेसिफ़िकेशन के साथ काम नहीं करती थी. इसलिए, अब यह सुविधा उपलब्ध नहीं है.
टच डिवाइस पर कार्रवाई करना
Android पर टच डिवाइस के काम करने के तरीके के बारे में यहां खास जानकारी दी गई है.
EventHub
,evdev
ड्राइवर से रॉ इवेंट पढ़ता है.InputReader
, रॉ इवेंट का इस्तेमाल करता है. साथ ही, हर टूल की पोज़िशन और अन्य विशेषताओं के बारे में इंटरनल स्टेटस को अपडेट करता है. यह कुकी, बटन की स्थितियों को भी ट्रैक करती है.- अगर BACK या FORWARD बटन को दबाया या छोड़ा गया था, तो
InputReader
,InputDispatcher
को मुख्य इवेंट के बारे में सूचना देता है. InputReader
से यह तय होता है कि वर्चुअल बटन दबाया गया है या नहीं. ऐसा होने पर, यहInputDispatcher
को मुख्य इवेंट के बारे में सूचना देता है.InputReader
से यह तय होता है कि टच, डिसप्ले की सीमाओं के अंदर शुरू हुआ था या नहीं. अगर ऐसा होता है, तो यहInputDispatcher
को टच इवेंट के बारे में सूचना देता है.- अगर टच करने वाले टूल मौजूद नहीं हैं, लेकिन कम से कम एक होवर करने वाला टूल मौजूद है, तो
InputReader
होवर इवेंट के बारे मेंInputDispatcher
सूचना देता है. - अगर टच डिवाइस का टाइप pointer है, तो
InputReader
पॉइंटर के जेस्चर का पता लगाता है, पॉइंटर को उसके हिसाब से ले जाता है और उसे स्पॉट करता है. साथ ही,InputDispatcher
को पॉइंटर इवेंट के बारे में सूचना देता है. 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
- रॉ ऐक्सिस की सटीक वैल्यू. उदाहरण के लिए, 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
है, तो सिस्टम क्लासिफ़िकेशन एल्गोरिदम के हिसाब से डिवाइस टाइप का अपने-आप पता लगाता है.
डिवाइस टाइप, टच डिवाइस के व्यवहार को कैसे प्रभावित करता है, इस बारे में ज़्यादा जानने के लिए क्लासिफ़िकेशन सेक्शन देखें.
Android 3 और इससे पहले के वर्शन में, सभी टच डिवाइसों को टच स्क्रीन माना जाता था.
touch.orientationAware
परिभाषा: touch.orientationAware
= 0
| 1
इससे यह तय होता है कि डिसप्ले ओरिएंटेशन में बदलाव होने पर, टच डिवाइस को प्रतिक्रिया देनी चाहिए या नहीं.
-
अगर वैल्यू
1
है, तो डिसप्ले ओरिएंटेशन बदलने पर, टच डिवाइस से रिपोर्ट की गई टच पोज़िशन घूम जाती हैं. -
अगर वैल्यू
0
पर सेट है, तो टच डिवाइस से रिपोर्ट की गई टच पोज़िशन पर, डिसप्ले ओरिएंटेशन में होने वाले बदलावों का कोई असर नहीं पड़ता.
अगर डिवाइस टच स्क्रीन है, तो डिफ़ॉल्ट वैल्यू 1
होती है. अगर ऐसा नहीं है, तो डिफ़ॉल्ट वैल्यू 0
होती है.
सिस्टम, इंटरनल और एक्सटर्नल टच स्क्रीन और डिसप्ले के बीच अंतर करता है. ओरिएंटेशन के हिसाब से काम करने वाली इंटरनल टच स्क्रीन को, इंटरनल डिसप्ले के ओरिएंटेशन के हिसाब से घुमाया जाता है. ओरिएंटेशन के हिसाब से काम करने वाली बाहरी टच स्क्रीन को, बाहरी डिसप्ले के ओरिएंटेशन के हिसाब से घुमाया जाता है.
ओरिएंटेशन अवेयरनेस का इस्तेमाल, Nexus One जैसे डिवाइसों पर टच स्क्रीन को घुमाने की सुविधा देने के लिए किया जाता है. उदाहरण के लिए, जब डिवाइस को उसकी सामान्य ओरिएंटेशन से 90 डिग्री दाईं ओर घुमाया जाता है, तो टच की ऐब्सलूट पोज़िशन को इस तरह से रीमैप किया जाता है कि टच स्क्रीन के ऐब्सलूट कोऑर्डिनेट सिस्टम के सबसे ऊपर बाएं कोने में किए गए टच को, डिसप्ले के घुमाए गए कोऑर्डिनेट सिस्टम के सबसे ऊपर बाएं कोने में किए गए टच के तौर पर रिपोर्ट किया जाता है. ऐसा इसलिए किया जाता है, ताकि टच की जानकारी को उसी कोऑर्डिनेट सिस्टम के साथ रिपोर्ट किया जा सके जिसका इस्तेमाल ऐप्लिकेशन, विज़ुअल एलिमेंट बनाने के लिए करते हैं.
Honeycomb से पहले, यह माना जाता था कि सभी टच डिवाइसों को ओरिएंटेशन के बारे में पता होता है.
touch.gestureMode
परिभाषा: touch.gestureMode
= pointer
| spots
|
default
यह पॉइंटर के जेस्चर के लिए प्रज़ेंटेशन मोड तय करता है. यह कॉन्फ़िगरेशन प्रॉपर्टी सिर्फ़ तब काम करती है, जब टच डिवाइस का टाइप pointer हो.
-
अगर वैल्यू
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, size फ़ील्ड
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
= <एक नॉन-नेगेटिव फ़्लोटिंग पॉइंट नंबर>
यह कैलिब्रेशन में इस्तेमाल किए गए कॉन्स्टेंट स्केल फ़ैक्टर के बारे में बताता है.
डिफ़ॉल्ट वैल्यू 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
डेफ़िनिशन: touch.pressure.scale
= <एक नॉन-नेगेटिव फ़्लोटिंग पॉइंट नंबर>
यह कैलिब्रेशन में इस्तेमाल किए गए कॉन्स्टेंट स्केल फ़ैक्टर के बारे में बताता है.
डिफ़ॉल्ट वैल्यू 1.0 / raw.pressure.max
है.
हिसाब लगाना
pressure
फ़ील्ड की वैल्यू, तय किए गए कैलिब्रेशन पैरामीटर पर निर्भर करती है.
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
फ़ील्ड, ऐंगल के मेज़रमेंट के तौर पर टच और टूल के ओरिएंटेशन के बारे में बताता है. 0
ओरिएंटेशन से पता चलता है कि मुख्य ऐक्सिस वर्टिकल है. -PI/2
से पता चलता है कि मुख्य ऐक्सिस बाईं ओर है. PI/2
से पता चलता है कि मुख्य ऐक्सिस दाईं ओर है. स्टाइलस टूल मौजूद होने पर, ओरिएंटेशन की रेंज को पूरे सर्कल की रेंज में बताया जा सकता है. यह रेंज -PI
या PI
से शुरू होती है.
tilt
फ़ील्ड, टूल के झुकाव को ऐंगल के मेज़रमेंट के तौर पर दिखाता है.
0
का झुकाव दिखाता है कि टूल, सतह के लंबवत है.
PI/2
के झुकाव से पता चलता है कि टूल, सतह पर सीधा रखा गया है.
touch.orientation.calibration
परिभाषा: touch.orientation.calibration
= none
|
interpolated
| vector
| default
इससे पता चलता है कि ओरिएंटेशन की जानकारी देने के लिए, टच ड्राइवर किस तरह के मेज़रमेंट का इस्तेमाल करता है.
- अगर वैल्यू
none
है, तो ओरिएंटेशन की जानकारी नहीं होती. इसलिए, इसे 0 पर सेट किया जाता है. - अगर वैल्यू
interpolated
है, तो ओरिएंटेशन को इस तरह से इंटरपोलेट किया जाता है किraw.orientation.min
की रॉ वैल्यू-PI/2
पर औरraw.orientation.max
की रॉ वैल्यूPI/2
पर मैप हो जाए.(raw.orientation.min + raw.orientation.max) / 2
की सेंटर वैल्यू,0
पर मैप होती है. - अगर वैल्यू
vector
है, तो ओरिएंटेशन को दो साइंड 4-बिट फ़ील्ड वाले पैक किए गए वेक्टर के तौर पर इंटरप्रेट किया जाता है. इस प्रज़ेंटेशन का इस्तेमाल, Atmel Object Based Protocol के पार्ट पर किया जाता है. डिकोड करने पर, वेक्टर से ओरिएंटेशन ऐंगल और कॉन्फ़िडेंस मैग्नीट्यूड मिलता है. कॉन्फ़िडेंस मैग्नीट्यूड का इस्तेमाल, साइज़ की जानकारी को स्केल करने के लिए किया जाता है. हालांकि, ऐसा तब तक किया जाता है, जब तक कि वह जानकारी ज्यामितीय न हो. - अगर वैल्यू
default
है, तो सिस्टमinterpolated
कैलिब्रेशन का इस्तेमाल करता है. हालांकि, ऐसा तब होता है, जब ओरिएंटेशन ऐक्सिस उपलब्ध हो. अगर ओरिएंटेशन ऐक्सिस उपलब्ध नहीं है, तो सिस्टमnone
का इस्तेमाल करता है.
हिसाब लगाना
orientation
और tilt
फ़ील्ड की वैल्यू का हिसाब, तय किए गए कैलिब्रेशन पैरामीटर और उपलब्ध इनपुट के आधार पर लगाया जाता है.
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
फ़ील्ड, टूल और टच डिवाइस की सतह के बीच की दूरी के बारे में बताता है. 0.0 की वैल्यू का मतलब है कि सीधे तौर पर संपर्क किया गया है. वहीं, इससे बड़ी वैल्यू का मतलब है कि सतह से दूरी बढ़ रही है.
touch.distance.calibration
परिभाषा: touch.distance.calibration
= none
|
scaled
| default
इससे पता चलता है कि टच ड्राइवर, दूरी की जानकारी देने के लिए किस तरह के मेज़रमेंट का इस्तेमाल करता है.
-
अगर वैल्यू
none
है, तो दूरी का पता नहीं चलता. इसलिए, इसे 0 पर सेट किया जाता है. -
अगर वैल्यू
scaled
है, तो बताई गई दूरी को एक स्थिर स्केल फ़ैक्टर से गुणा किया जाता है. -
अगर वैल्यू
default
है, तो सिस्टमscaled
कैलिब्रेशन का इस्तेमाल करता है. हालांकि, ऐसा तब होता है, जब दूरी का ऐक्सिस उपलब्ध हो. अगर दूरी का ऐक्सिस उपलब्ध नहीं है, तो सिस्टमnone
का इस्तेमाल करता है.
touch.distance.scale
डेफ़िनिशन: touch.distance.scale
= <एक नॉन-नेगेटिव फ़्लोटिंग पॉइंट नंबर>
यह कैलिब्रेशन में इस्तेमाल किए गए कॉन्स्टेंट स्केल फ़ैक्टर के बारे में बताता है.
डिफ़ॉल्ट वैल्यू 1.0
है.
हिसाब लगाना
distance
फ़ील्ड की वैल्यू, तय किए गए कैलिब्रेशन पैरामीटर पर निर्भर करती है.
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
कंपैटिबिलिटी से जुड़ी अहम जानकारी
Android Ice Cream Sandwich 4.0 में, टच डिवाइसों के लिए कॉन्फ़िगरेशन प्रॉपर्टी में काफ़ी बदलाव किया गया है. टच डिवाइसों के लिए, सभी इनपुट डिवाइस कॉन्फ़िगरेशन फ़ाइलों को अपडेट करना होगा, ताकि नई कॉन्फ़िगरेशन प्रॉपर्टी का इस्तेमाल किया जा सके.
ऐसा हो सकता है कि आपको पुराने टच डिवाइस के ड्राइवर भी अपडेट करने पड़ें.
वर्चुअल की-मैप फ़ाइलें
वर्चुअल बटन लागू करने के लिए, टच डिवाइसों का इस्तेमाल किया जा सकता है.
ऐसा करने के कई तरीके हैं. ये तरीके, टच कंट्रोलर की क्षमताओं पर निर्भर करते हैं. कुछ टच कंट्रोलर को सीधे तौर पर कॉन्फ़िगर किया जा सकता है, ताकि फ़र्मवेयर रजिस्टर सेट करके सॉफ़्ट की लागू की जा सकें. कभी-कभी, सॉफ़्टवेयर में टच कोऑर्डिनेट से की-कोड तक मैपिंग करना ज़रूरी होता है.
सॉफ़्टवेयर में वर्चुअल बटन लागू किए जाने पर, कर्नल को virtualkeys.<devicename>
नाम की वर्चुअल बटन मैप फ़ाइल को बोर्ड प्रॉपर्टी के तौर पर एक्सपोर्ट करना होगा. उदाहरण के लिए,
अगर टच स्क्रीन डिवाइस के ड्राइवर, डिवाइस का नाम "touchyfeely" के तौर पर रिपोर्ट करते हैं, तो
वर्चुअल की मैप फ़ाइल का पाथ यह होना चाहिए
/sys/board_properties/virtualkeys.touchyfeely
.
वर्चुअल की-मैप फ़ाइल में, टच स्क्रीन पर मौजूद वर्चुअल कुंजियों के कोऑर्डिनेट और Linux की-कोड के बारे में जानकारी होती है.
वर्चुअल की-मैप फ़ाइल के अलावा, Linux की-कोड को Android की-कोड पर मैप करने के लिए, एक की-लेआउट फ़ाइल और एक की-कैरेक्टर मैप फ़ाइल भी होनी चाहिए. साथ ही, कीबोर्ड डिवाइस का टाइप (आम तौर पर SPECIAL_FUNCTION
) तय करने के लिए भी एक फ़ाइल होनी चाहिए.
वाक्य-विन्यास
वर्चुअल की मैप फ़ाइल, प्लेन टेक्स्ट वाली फ़ाइल होती है. इसमें वर्चुअल की लेआउट के ब्यौरे का क्रम होता है. इन्हें नई लाइनों या कोलन से अलग किया जाता है.
टिप्पणी वाली लाइनें '#' से शुरू होती हैं और लाइन के आखिर तक चलती हैं.
हर वर्चुअल कुंजी को कोलन से अलग किए गए छह कॉम्पोनेंट से दिखाया जाता है:
0x01
: वर्शन कोड. इसकी वैल्यू हमेशा0x01
होनी चाहिए.- <Linux key code>: वर्चुअल कुंजी का Linux की कोड.
- <centerX>: वर्चुअल बटन के बीच का X पिक्सल कोऑर्डिनेट.
- <centerY>: वर्चुअल बटन के बीच का Y पिक्सल कोऑर्डिनेट.
- <width>: पिक्सल में वर्चुअल कुंजी की चौड़ाई.
- <height>: पिक्सल में वर्चुअल कुंजी की ऊंचाई.
सभी कोऑर्डिनेट और साइज़, डिसप्ले कोऑर्डिनेट सिस्टम के हिसाब से तय किए जाते हैं.
यहां वर्चुअल की मैप फ़ाइल दी गई है. इसमें मौजूद सभी जानकारी एक ही लाइन में लिखी गई है.
# 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
एक ही वर्चुअल की-मैप फ़ाइल को कई लाइनों में भी लिखा जा सकता है.
# 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
ऊपर दिए गए उदाहरण में, टच स्क्रीन का रिज़ॉल्यूशन 480x800 है. इसलिए, सभी वर्चुअल कुंजियों का <centerY> कोऑर्डिनेट 835 है, जो टच स्क्रीन के दिखने वाले हिस्से से थोड़ा नीचे है.
पहली कुंजी में Linux स्कैन कोड 158
(KEY_BACK
), centerX 55
, centerY 835
, चौड़ाई 90
, और ऊंचाई 55
है.
उदाहरण
वर्चुअल कीबोर्ड मैप फ़ाइल: /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
कीबोर्ड लेआउट फ़ाइल: /system/usr/keylayout/touchyfeely.kl
.
key 158 BACK key 139 MENU key 172 HOME key 217 SEARCH
कीबोर्ड के वर्णों का मैप करने वाली फ़ाइल: /system/usr/keychars/touchyfeely.kcm
.
type SPECIAL_FUNCTION
पॉइंटर को बिना छुए मल्टी-टच जेस्चर
पॉइंटर मोड में, सिस्टम इन जेस्चर को समझता है:
- एक उंगली से टैप करें: क्लिक करें.
- एक उंगली से किए जाने वाले जेस्चर: पॉइंटर को इधर-उधर ले जाएं.
- एक उंगली से किए जाने वाले जेस्चर के साथ-साथ प्लस बटन दबाने पर: पॉइंटर को खींचें.
- दो उंगलियों से किया जाने वाला जेस्चर, जिसमें दोनों उंगलियां एक ही दिशा में चलती हैं: पॉइंटर के नीचे मौजूद हिस्से को उस दिशा में खींचें. पॉइंटर अपनी जगह से नहीं हिलता.
- दो उंगलियों से किया जाने वाला जेस्चर. इसमें दोनों उंगलियों को एक-दूसरे की ओर या एक-दूसरे से दूर ले जाया जाता है. साथ ही, इन्हें अलग-अलग दिशाओं में घुमाया जाता है: इससे पॉइंटर के आस-पास के हिस्से को पैन/स्केल/घुमाया जा सकता है. पॉइंटर अपनी जगह से नहीं हिलता.
- एक से ज़्यादा उंगलियों से किया जाने वाला मोशन: फ़्रीफ़ॉर्म जेस्चर.
हथेली को खारिज करने की सुविधा
Android 13 से, सिस्टम में यह सुविधा है कि अगर बिल्ट-इन फ़्रेमवर्क चालू है, तो वह हथेलियों से किए गए इनपुट को अपने-आप अस्वीकार कर सकता है. कस्टम-बिल्ट समाधानों का इस्तेमाल अब भी किया जा सकता है. हालांकि, हथेली का पता चलने पर TOOL_TYPE_PALM
फ़्लैग दिखाने के लिए, इनमें बदलाव करना पड़ सकता है. बिल्ट-इन फ़्रेमवर्क, कस्टम समाधानों के साथ भी काम करता है.
असल मॉडल, जेस्चर डेटा के पहले 90 मि॰से॰, मौजूदा पॉइंटर, और आस-पास के पॉइंटर को देखता है. इसके बाद, यह देखता है कि टच, डिसप्ले के किनारे से कितनी दूर हैं.
इसके बाद, यह हर पॉइंटर के हिसाब से तय करता है कि कौनसे पॉइंटर हथेलियां हैं. यह हर संपर्क के साइज़ को भी ध्यान में रखता है. इसकी जानकारी touchMajor
और touchMinor
से मिलती है. इसके बाद, Android फ़्रेमवर्क, टच स्ट्रीम से उन पॉइंटर को हटा देता है जिन्हें हथेलियों के तौर पर मार्क किया गया है.
अगर ऐप्लिकेशन को पहले ही पॉइंटर भेज दिया गया था, तो सिस्टम इनमें से कोई एक काम करेगा:
- (अगर अन्य पॉइंटर चालू हैं)
ACTION_POINTER_UP
औरFLAG_CANCELED
सेट किए गए पॉइंटर को रद्द करता है. - (अगर यह एकमात्र पॉइंटर है)
ACTION_CANCEL
की मदद से पॉइंटर को रद्द करता है.
सार्वजनिक एपीआई MotionEvent.FLAG_CANCELED
से पता चलता है कि मौजूदा इवेंट को उपयोगकर्ता की कार्रवाई को ट्रिगर नहीं करना चाहिए. यह फ़्लैग ACTION_CANCEL
और ACTION_POINTER_UP
, दोनों के लिए सेट किया गया है.
अगर पाम पॉइंटर को ऐप्लिकेशन पर नहीं भेजा गया है, तो सिस्टम पॉइंटर को हटा देता है.
हथेली से टच होने पर स्क्रीन लॉक होने की सुविधा चालू करना
- अपने टच ड्राइवर में,
input_abs_set_res
मैक्रो का इस्तेमाल करके, इन फ़ील्ड के लिए रिज़ॉल्यूशन सेट करें. इनकी यूनिट पिक्सेल प्रति मि॰मी॰ होती है:ABS_MT_POSITION_X
ABS_MT_POSITION_Y
ABS_MT_TOUCH_MAJOR
ABS_MT_TOUCH_MINOR
ABS_MT_TOUCH_MINOR
के लिए सहायता उपलब्ध कराना ज़रूरी नहीं है. हालांकि, अगर आपके डिवाइस पर यह सुविधा काम करती है, तो पक्का करें कि रिज़ॉल्यूशन सही तरीके से सेट किया गया हो. - यह पुष्टि करने के लिए कि फ़ील्ड सही तरीके से सेट किए गए हैं, यह कमांड चलाएं:
$ adb shell getevent -li
- रनटाइम के दौरान इस सुविधा को चालू करने के लिए, यह कमांड चलाएं:
$ adb shell device_config put input_native_boot palm_rejection_enabled 1
system_server
प्रोसेस को फिर से शुरू करें.$ adb shell stop && adb shell start
- पुष्टि करें कि
adb shell dumpsys input
में यह दिखाया गया हो किUnwantedInteractionBlocker
में पाम रिजेक्टर मौजूद हैं. अगर ऐसा नहीं होता है, तो इनपुट से जुड़े लॉग देखें. इससे आपको यह पता चल सकता है कि क्या गलत कॉन्फ़िगर किया गया है.रेफ़रंस के लिए, यहां दिया गया उदाहरण देखें:
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: {} - इस सुविधा को हमेशा के लिए चालू करने के लिए, अपनी
init**rc
फ़ाइल में इससे जुड़ी sysprop कमांड जोड़ें:setprop persist.device_config.input_native_boot.palm_rejection_enabled 1