मल्टी-टच जेस्चर तब होता है, जब स्क्रीन पर एक से ज़्यादा पॉइंटर (उंगलियों) से टैप किया जाता है एक साथ. इस दस्तावेज़ में, जेस्चर (हाव-भाव) वाले जेस्चर का पता लगाने का तरीका बताया गया है एक से ज़्यादा पॉइंटर सेट करें.
एक से ज़्यादा पॉइंटर ट्रैक करना
जब कई पॉइंटर एक ही समय पर स्क्रीन पर टैप करते हैं, तो सिस्टम निम्न टच इवेंट:
ACTION_DOWN
: पहला पॉइंटर स्क्रीन पर टैप करने पर भेजा जाता है. इससे जेस्चर शुरू हो जाता है. कॉन्टेंट बनाने इस पॉइंटर का पॉइंटर डेटा हमेशा इंडेक्स0
परMotionEvent
.ACTION_POINTER_DOWN
: तब भेजा जाता है जब अतिरिक्त पॉइंटर पहले के बाद स्क्रीन में प्रवेश करते हैं. डाउनलोड करके पॉइंटर का इंडेक्स जो अभी-अभी इसके इस्तेमाल से घट गया हैgetActionIndex()
.ACTION_MOVE
: यह सूचना तब भेजी जाती है, जब हाथ के जेस्चर में कोई बदलाव होता है. ऐसा होने पर, पॉइंटर.ACTION_POINTER_UP
: यह सूचना तब भेजी जाती है, जब कोई नॉन-प्राइमरी पॉइंटर ऊपर की ओर जाता है. तो आपको डाइग्नोस्टिक टूल के ज़रिए वह पॉइंटर जोgetActionIndex()
का इस्तेमाल करते हुए बढ़ा है.ACTION_UP
: तब भेजा जाता है जब आखिरी पॉइंटर स्क्रीन से बाहर चला जाता है.ACTION_CANCEL
: इससे पता चलता है कि हाथ के सभी जेस्चर (हाव-भाव) के साथ-साथ पूरा जेस्चर रद्द हो गया है.
शुरू और खत्म करने के लिए हाथ के जेस्चर
जेस्चर, ACTION_DOWN
से शुरू होने वाले इवेंट की सीरीज़ होती है
इवेंट और ACTION_UP
या पर खत्म होने वाला
ACTION_CANCEL
इवेंट. एक बार में, हाथ के एक जेस्चर का इस्तेमाल किया जा रहा है. कॉन्टेंट बनाने
डाउन, मूव, अप, और रद्द करने की कार्रवाइयां, हाथ के सभी जेस्चर पर लागू होती हैं. उदाहरण के लिए,
ACTION_MOVE
वाला इवेंट, सभी पॉइंटर के लिए हलचल का संकेत दे सकता है
करें.
पॉइंटर पर नज़र रखें
अलग-अलग पॉइंटर को ट्रैक करने के लिए, पॉइंटर के इंडेक्स और आईडी का इस्तेमाल करें
MotionEvent
में स्थितियां.
- इंडेक्स:
MotionEvent
स्टोर पॉइंटर जानकारी होती है. पॉइंटर का इंडेक्स, इस कॉलम में उसकी पोज़िशन होता है कलेक्शन.MotionEvent
वाले ज़्यादातर तरीके, पॉइंटर इंडेक्स को इस तरह लेते हैं पॉइंटर आईडी के बजाय, पैरामीटर का इस्तेमाल करें. - आईडी: हर पॉइंटर में एक आईडी मैपिंग भी होती है, जो टच इवेंट में लगातार बना रहने पर, इससे किसी एक पॉइंटर को ट्रैक किया जा सकता है इस्तेमाल किया जा सकता है.
किसी मोशन इवेंट में, अलग-अलग पॉइंटर, तय क्रम में नहीं दिखते हैं. इसलिए,
पॉइंटर का इंडेक्स, एक से दूसरे इवेंट में बदल सकता है, लेकिन पॉइंटर आईडी
यह गारंटी है कि जब तक पॉइंटर बना रहेगा, तब तक वह स्थिर रहेगा
सक्रिय है. इसका इस्तेमाल करें
getPointerId()
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
पॉइंटर को ट्रैक करने का तरीका
मोशन इवेंट को हाथ के जेस्चर से देखें. फिर, लगातार होने वाली मोशन इवेंट के लिए,
findPointerIndex()
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
विधि से उस मोशन इवेंट में दिए गए पॉइंटर आईडी के लिए पॉइंटर इंडेक्स प्राप्त करें.
उदाहरण के लिए:
Kotlin
private var mActivePointerId: Int = 0 override fun onTouchEvent(event: MotionEvent): Boolean { ... // Get the pointer ID. mActivePointerId = event.getPointerId(0) // ... Many touch events later... // Use the pointer ID to find the index of the active pointer // and fetch its position. val (x: Float, y: Float) = event.findPointerIndex(mActivePointerId).let { pointerIndex -> // Get the pointer's current position. event.getX(pointerIndex) to event.getY(pointerIndex) } ... }
Java
private int mActivePointerId; public boolean onTouchEvent(MotionEvent event) { ... // Get the pointer ID. mActivePointerId = event.getPointerId(0); // ... Many touch events later... // Use the pointer ID to find the index of the active pointer // and fetch its position. int pointerIndex = event.findPointerIndex(mActivePointerId); // Get the pointer's current position. float x = event.getX(pointerIndex); float y = event.getY(pointerIndex); ... }
एक से ज़्यादा टच पॉइंटर की सुविधा देने के लिए, सभी ऐक्टिव पॉइंटर को कैश मेमोरी में सेव किया जा सकता है
अपने आईडी को, निजी ACTION_POINTER_DOWN
और
ACTION_DOWN
इवेंट का समय. इस पर अपनी कैश मेमोरी से पॉइंटर हटाएं
उनके ACTION_POINTER_UP
और ACTION_UP
इवेंट. आप
ये कैश मेमोरी में सेव किए गए आईडी, अन्य ऐक्शन इवेंट को सही तरीके से मैनेज करने में मदद करेंगे. इसके लिए
उदाहरण के लिए, ACTION_MOVE
इवेंट को प्रोसेस करते समय,
कैश मेमोरी में सेव किया गया हर ऐक्टिव पॉइंटर आईडी,
getX()
और
getY()
फ़ंक्शन है, तो इन निर्देशांकों की तुलना अपने संचित निर्देशांकों से करें
देखें कि कौनसे पॉइंटर मूव किए गए हैं.
getActionIndex()
फ़ंक्शन का इस्तेमाल इसके साथ करें
ACTION_POINTER_UP
और ACTION_POINTER_DOWN
इवेंट
सिर्फ़. ACTION_MOVE
इवेंट के साथ इस फ़ंक्शन का इस्तेमाल न करें, क्योंकि यह
हमेशा 0
दिखाता है.
MotionEvent
कार्रवाइयाँ वापस पाएं
इसका इस्तेमाल करें
getActionMasked()
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
तरीका या साथ काम करने वाला वर्शन
MotionEventCompat.getActionMasked()
MotionEvent
की कार्रवाई को फिर से पाने के लिए. पहले वाले से अलग
getAction()
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
तरीका है, getActionMasked()
को कई इमेज के साथ काम करने के लिए डिज़ाइन किया गया है
पॉइंटर. यह पॉइंटर इंडेक्स के बिना कार्रवाई लौटाता है. ऐसी कार्रवाइयों के लिए जिनमें
मान्य पॉइंटर इंडेक्स, इसका इंडेक्स देने के लिए getActionIndex()
का इस्तेमाल करें
कार्रवाई से जुड़े पॉइंटर, जैसा कि नीचे दिए गए स्निपेट में दिखाया गया है:
Kotlin
val (xPos: Int, yPos: Int) = MotionEventCompat.getActionMasked(event).let { action -> Log.d(DEBUG_TAG, "The action is ${actionToString(action)}") // Get the index of the pointer associated with the action. MotionEventCompat.getActionIndex(event).let { index -> // The coordinates of the current screen contact, relative to // the responding View or Activity. MotionEventCompat.getX(event, index).toInt() to MotionEventCompat.getY(event, index).toInt() } } if (event.pointerCount > 1) { Log.d(DEBUG_TAG, "Multitouch event") } else { // Single touch event. Log.d(DEBUG_TAG, "Single touch event") } ... // Given an action int, returns a string description. fun actionToString(action: Int): String { return when (action) { MotionEvent.ACTION_DOWN -> "Down" MotionEvent.ACTION_MOVE -> "Move" MotionEvent.ACTION_POINTER_DOWN -> "Pointer Down" MotionEvent.ACTION_UP -> "Up" MotionEvent.ACTION_POINTER_UP -> "Pointer Up" MotionEvent.ACTION_OUTSIDE -> "Outside" MotionEvent.ACTION_CANCEL -> "Cancel" else -> "" } }
Java
int action = MotionEventCompat.getActionMasked(event); // Get the index of the pointer associated with the action. int index = MotionEventCompat.getActionIndex(event); int xPos = -1; int yPos = -1; Log.d(DEBUG_TAG,"The action is " + actionToString(action)); if (event.getPointerCount() > 1) { Log.d(DEBUG_TAG,"Multitouch event"); // The coordinates of the current screen contact, relative to // the responding View or Activity. xPos = (int)MotionEventCompat.getX(event, index); yPos = (int)MotionEventCompat.getY(event, index); } else { // Single touch event. Log.d(DEBUG_TAG,"Single touch event"); xPos = (int)MotionEventCompat.getX(event, index); yPos = (int)MotionEventCompat.getY(event, index); } ... // Given an action int, returns a string description public static String actionToString(int action) { switch (action) { case MotionEvent.ACTION_DOWN: return "Down"; case MotionEvent.ACTION_MOVE: return "Move"; case MotionEvent.ACTION_POINTER_DOWN: return "Pointer Down"; case MotionEvent.ACTION_UP: return "Up"; case MotionEvent.ACTION_POINTER_UP: return "Pointer Up"; case MotionEvent.ACTION_OUTSIDE: return "Outside"; case MotionEvent.ACTION_CANCEL: return "Cancel"; } return ""; }
अन्य संसाधन
इनपुट इवेंट के बारे में ज़्यादा जानकारी के लिए, यह लेख देखें संदर्भ:
- इनपुट इवेंट के बारे में खास जानकारी
- सेंसर खास जानकारी
- अपने हिसाब से इंटरैक्टिव देखें
- खींचें और छोड़ें