जब उपयोगकर्ता स्टाइलस का इस्तेमाल करके, किसी ऐप्लिकेशन में कुछ बनाते, लिखते या इंटरैक्ट करते हैं, तो कभी-कभी उनकी हथेली से स्क्रीन टच हो जाती है. हो सकता है कि सिस्टम, हथेली से हुए टच को गलती से हुआ टच मानकर खारिज कर दे. हालांकि, इससे पहले ही आपके ऐप्लिकेशन को टच इवेंट की जानकारी मिल जाए.
आपके ऐप्लिकेशन को, गलती से हुए टच इवेंट की पहचान करनी होगी और उन्हें अनदेखा करना होगा. 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 और इसके बाद के वर्शन पर, ACTION_POINTER_UP के लिए FLAG_CANCELED. की जांच करें.
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 डेवलपमेंट के बड़े लक्ष्यों के बारे में बताया गया है: