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

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

हथेली के छूने की पहचान करना और उसे अनदेखा करना

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

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

क्या आपका कोई सवाल है या सुझाव/राय देनी है

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