जब उपयोगकर्ता स्टाइलस का इस्तेमाल करके ऐप्लिकेशन पर ड्रॉ करते हैं, लिखते हैं या उससे इंटरैक्ट करते हैं, तो कभी-कभी वे अपनी हथेली से स्क्रीन को छूते हैं. सिस्टम, इवेंट को गलती से हथेली के छूने के तौर पर पहचानने और खारिज करने से पहले, हो सकता है कि टच इवेंट की सूचना आपके ऐप्लिकेशन को भेजी जाए.
हथेली के छूने की पहचान करना और उसे अनदेखा करना
आपके ऐप्लिकेशन को ग़ैर-ज़रूरी टच इवेंट की पहचान करनी चाहिए और उन्हें अनदेखा करना चाहिए. Android, आपके ऐप्लिकेशन पर MotionEvent
ऑब्जेक्ट भेजकर, हथेली से किए गए टच को रद्द कर देता है.
अपने ऐप्लिकेशन पर भेजे गए
MotionEvent
ऑब्जेक्ट की जांच करें. इवेंट प्रॉपर्टी (कार्रवाइयां और फ़्लैग) तय करने के लिए,MotionEvent
API का इस्तेमाल करें:- सिंगल-पॉइंटर इवेंट —
ACTION_CANCEL
देखें. Android 13 और उसके बाद के वर्शन पर,FLAG_CANCELED
भी देखें. - मल्टी-पॉइंटर इवेंट — Android 13 और इसके बाद के वर्शन पर,
ACTION_POINTER_UP
औरFLAG_CANCELED
देखें.
- सिंगल-पॉइंटर इवेंट —
उन मोशन इवेंट को अनदेखा करें जिनमें
ACTION_CANCEL
औरACTION_POINTER_UP
/FLAG_CANCELED
प्रॉपर्टी हैं.
1. मोशन इवेंट ऑब्जेक्ट हासिल करना
अपने ऐप्लिकेशन में OnTouchListener
जोड़ें:
Kotlin
val myView = findViewById<View>(R.id.myView).apply { setOnTouchListener { view, event -> // Process motion event. } }
Java
View myView = findViewById(R.id.myView); myView.setOnTouchListener( (view, event) -> { // Process motion event. });
2. इवेंट ऐक्शन और फ़्लैग तय करना
ACTION_CANCEL
देखें, जो सभी एपीआई लेवल पर एक-पॉइंटर इवेंट दिखाता है. Android 13 और उसके बाद के वर्शन पर, FLAG_CANCELED.
के लिए ACTION_POINTER_UP
को चुनें
Kotlin
val myView = findViewById<View>(R.id.myView).apply { setOnTouchListener { view, event -> when (event.actionMasked) { MotionEvent.ACTION_CANCEL -> { //Process canceled single-pointer motion event for all SDK versions. } MotionEvent.ACTION_POINTER_UP -> { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU && (event.flags and MotionEvent.FLAG_CANCELED) == MotionEvent.FLAG_CANCELED) { //Process canceled multi-pointer motion event for Android 13 and higher. } } } true } }
Java
View myView = findViewById(R.id.myView); myView.setOnTouchListener( (view, event) -> { switch (event.getActionMasked()) { case MotionEvent.ACTION_CANCEL: // Process canceled single-pointer motion event for all SDK versions. case MotionEvent.ACTION_UP: if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU && (event.getFlags() & MotionEvent.FLAG_CANCELED) == MotionEvent.FLAG_CANCELED) { //Process canceled multi-pointer motion event for Android 13 and higher. } } return true; });
3. जेस्चर को पहले जैसा करना
हथेली से छूने की पहचान करने के बाद, स्क्रीन पर किए गए जेस्चर के इफ़ेक्ट को पहले जैसा किया जा सकता है.
आपके ऐप्लिकेशन में उपयोगकर्ता की कार्रवाइयों का इतिहास होना चाहिए, ताकि अनजाने में किए गए इनपुट को हटाया जा सके. जैसे, हथेली से टच करना. इतिहास को सेव रखने के तरीके का उदाहरण देखने के लिए, Android ऐप्लिकेशन में स्टाइलस की सुविधा को बेहतर बनाएं कोडलैब में, बेसिक ड्रॉइंग ऐप्लिकेशन लागू करें देखें.
प्रमुख बिंदु
MotionEvent
: टच और मूवमेंट इवेंट दिखाता है. इसमें वह जानकारी होती है जिससे यह तय किया जा सकता है कि किसी इवेंट को अनदेखा किया जाना चाहिए या नहीं.OnTouchListener#onTouch()
: इसमेंMotionEvent
ऑब्जेक्ट शामिल होते हैं.MotionEvent#getActionMasked()
: किसी मोशन इवेंट से जुड़ी कार्रवाई दिखाता है.ACTION_CANCEL
:MotionEvent
एक ऐसा कॉन्स्टेंट है जिससे पता चलता है कि किसी जेस्चर को पहले जैसा करना है.ACTION_POINTER_UP
:MotionEvent
यह एक कॉन्स्टेंट है. इससे पता चलता है कि पहले पॉइंटर के अलावा, कोई दूसरा पॉइंटर भी ऊपर गया है. इसका मतलब है कि वह डिवाइस की स्क्रीन से संपर्क नहीं कर रहा है.FLAG_CANCELED
:MotionEvent
कंसटेंट, जो बताता है कि पॉइंटर के ऊपर जाने की वजह से, अनजाने में टच इवेंट हुआ. Android 13 (एपीआई लेवल 33) और उसके बाद के वर्शन पर,ACTION_POINTER_UP
औरACTION_CANCEL
इवेंट में जोड़ा गया.
नतीजे
आपका ऐप्लिकेशन अब Android 13 और उसके बाद के एपीआई लेवल पर, कई पॉइंटर वाले इवेंट के लिए हथेली के स्पर्श की पहचान कर सकता है और उन्हें अस्वीकार कर सकता है. साथ ही, सभी एपीआई लेवल पर, एक पॉइंटर वाले इवेंट के लिए भी ऐसा कर सकता है.
ऐसे संग्रह जिनमें यह गाइड शामिल है
यह गाइड, चुने गए क्विक गाइड के कलेक्शन का हिस्सा है. इसमें Android डेवलपमेंट के बड़े लक्ष्यों के बारे में बताया गया है: