स्टाइलस की मदद से, हथेली से टच करने की सुविधा बंद करना

जब उपयोगकर्ता स्टाइलस का इस्तेमाल करके, किसी ऐप्लिकेशन पर लिखते हैं, ड्रॉ करते हैं या उससे इंटरैक्ट करते हैं, तो कभी-कभी वे अपने हाथ की हथेली से स्क्रीन को छू लेते हैं. ऐसा हो सकता है कि सिस्टम, हथेली के गलती से हुए टच को पहचानकर खारिज कर दे. हालांकि, इससे पहले ही टच इवेंट को आपके ऐप्लिकेशन को रिपोर्ट कर दिया जाए.

आपके ऐप्लिकेशन को गैर-ज़रूरी टच इवेंट का पता लगाना चाहिए और उन्हें अनदेखा करना चाहिए. Android 13 और इससे ऊपर के एपीआई लेवल, हथेली से किए गए टच को अन्य सभी एपीआई लेवल से अलग तरीके से दिखाते हैं.

नतीजे

आपका ऐप्लिकेशन, Android 13 और उसके बाद के एपीआई लेवल पर मल्टी-पॉइंटर इवेंट के लिए, हथेली से किए गए टच का पता लगा सकता है और उन्हें अस्वीकार कर सकता है. साथ ही, सभी एपीआई लेवल पर सिंगल-पॉइंटर इवेंट के लिए, हथेली से किए गए टच का पता लगा सकता है और उन्हें अस्वीकार कर सकता है.

हथेली से होने वाले टच का पता लगाना और उन्हें अनदेखा करना

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 इवेंट में जोड़ा गया.

ऐसे कलेक्शन जिनमें यह गाइड शामिल है

यह गाइड, Quick Guide के इन चुने गए कलेक्शन का हिस्सा है. इनमें Android डेवलपमेंट के ज़्यादातर लक्ष्यों के बारे में बताया गया है:

अपने ऐप्लिकेशन को टैबलेट, फ़ोल्ड किए जा सकने वाले डिवाइसों, और ChromeOS डिवाइसों पर ऑप्टिमाइज़ किए गए उपयोगकर्ता अनुभव के साथ काम करने की सुविधा दें.

कोई सवाल पूछना या सुझाव/राय देना या शिकायत करना

अक्सर पूछे जाने वाले सवालों वाले पेज पर जाएं और क्विक गाइड के बारे में जानें. इसके अलावा, हमसे संपर्क करें और हमें अपने सुझाव/राय दें या शिकायत करें.