जब उपयोगकर्ता स्टाइलस का इस्तेमाल करके, किसी ऐप्लिकेशन पर लिखते हैं, कुछ बनाते हैं या उससे इंटरैक्ट करते हैं, तो कभी-कभी वे अपने हाथ की हथेली से स्क्रीन को छू लेते हैं. ऐसा हो सकता है कि सिस्टम, हथेली के गलती से टच होने वाले इवेंट को पहचानकर खारिज कर दे. हालांकि, इससे पहले ही टच इवेंट की जानकारी आपके ऐप्लिकेशन को मिल जाए.
आपके ऐप्लिकेशन को गैर-ज़रूरी टच इवेंट की पहचान करनी चाहिए और उन्हें अनदेखा करना चाहिए. Android 13 और इससे ऊपर के एपीआई लेवल, हथेली के टच को अन्य सभी एपीआई लेवल से अलग तरीके से दिखाते हैं.
नतीजे
आपका ऐप्लिकेशन, Android 13 और उसके बाद के एपीआई लेवल पर मल्टी-पॉइंटर इवेंट के लिए, हथेली से किए गए टच का पता लगा सकता है और उन्हें अस्वीकार कर सकता है. साथ ही, सभी एपीआई लेवल पर सिंगल-पॉइंटर इवेंट के लिए, हथेली से किए गए टच का पता लगा सकता है और उन्हें अस्वीकार कर सकता है.
वर्शन के साथ काम करने की सुविधा
मल्टी-पॉइंटर इवेंट के लिए, अपने प्रोजेक्ट के minSDK को एपीआई लेवल 33 पर सेट करें.
सिंगल‑पॉइंटर इवेंट, एपीआई लेवल पर काम करते हैं.
डिपेंडेंसी
कोई नहीं.
हथेली से किए गए टच का पता लगाना और उन्हें अनदेखा करना
Android, हथेली के टच को रद्द कर देता है. इसके लिए, वह आपके ऐप्लिकेशन को MotionEvent ऑब्जेक्ट भेजता है.
आपके ऐप्लिकेशन को भेजे गए
MotionEventऑब्जेक्ट की जांच करें. इवेंट प्रॉपर्टी (कार्रवाइयां और फ़्लैग) का पता लगाने के लिए,MotionEventएपीआई का इस्तेमाल करें:- सिंगल-पॉइंटर इवेंट —
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 डेवलपमेंट के ज़्यादातर लक्ष्यों के बारे में बताया गया है: