2013-06-29 4 views
25

मैं एंड्रॉइड में दो तरीकों से उलझन में हूं। यह लगता है कि दोनों विधियां आपको बताती हैं कि यह किस प्रकार की घटना है, यानी, चाहे वह डाउन या अप ईवेंट हो।एंड्रॉइड में, मोशनएवेंट में getAction() और getActionMasked() के बीच क्या अंतर है?

मैं किस का उपयोग करूंगा?

public void onTouchEvent(MotionEvent e) 

प्रलेखन बोली मत करें, क्योंकि मैं इसे पढ़ा है, और मैं किसी भी पैरामीटर मैं किसी भी विधि का करने के लिए आपूर्ति के लिए कुछ अलग पाने के लिए कर सकते हैं नहीं दिख रहा।

public final int getAction() 

और

public final int getActionMasked() 

उत्तर

18

हाँ, वे दोनों कार्रवाई (ऊपर/नीचे आदि) लौटने के लिए, लेकिन getAction सूचक जानकारी के साथ कार्रवाई, जिस स्थिति में घटनाओं एक छोटे से अलग हो सकता है वापस आ सकते हैं । getActionMasked हमेशा पॉइंटर जानकारी "मास्क आउट" (इसे प्राप्त करें) के साथ "सरल" क्रियाएं वापस कर देगा, फिर आप पॉइंटर की अनुक्रमणिका प्राप्त करने के लिए उसी ईवेंट पर getPointerIndex को कॉल करेंगे। ध्यान दें कि आप इसे बहु-स्पर्श उपकरणों पर अधिकतर संपर्क (पॉइंटर्स) के साथ देखेंगे। पॉइंटर इंडेक्स अनिवार्य रूप से बिंदुओं से संपर्क करने के लिए घटनाओं से मिलान करने का एक तरीका है ताकि आप उन्हें अलग बता सकें।

+0

इस सूचक जानकारी क्या है? –

+0

रिटर्न मूल्य में अतिरिक्त बिट फ़ील्ड; कार्रवाई और सूचक सूचकांक एक ही पूर्णांक में वापस आते हैं।एंड्रॉइड उन्हें निकालने के लिए बिट मास्क के सेट को परिभाषित करता है (जो अनिवार्य रूप से एक्शन मास्क किया जाता है) –

29

getAction() एक पॉइंटर आईडी और एक ईवेंट (यानी, ऊपर, नीचे, स्थानांतरित) जानकारी देता है।

getActionMasked() केवल एक ईवेंट (यानी, ऊपर, नीचे, स्थानांतरित) जानकारी देता है। अन्य जानकारी मुखौटा है।

उदाहरण के लिए:

getAction() रिटर्न 0x0105
getActionMasked()0x0005, जो है 0x0105 & & ACTION_MASK वापस आ जाएगी।

  1. ACTION_MASK का मान 0xFF है। यह निम्नलिखित कार्यों को मुखौटा करता है।
    • ACTION_DOWN 0, यूपी 1, चाल 2
    • ACTION_POINTER_DOWN 5, उत्तर प्रदेश 6
  2. ACTION_POINTER_ID_MASK का मूल्य 0xFF00 है। इसने बहिष्कृत स्थिरांक से सूचक आईडी को मुखौटा किया।
    • ACTION_POINTER_1_DOWN 0x0005
    • ACTION_POINTER_2_DOWN 0x0105
    • ACTION_POINTER_3_DOWN 0x0205
    • ...
+0

मुझे अभी तक यह नहीं दिखाई देता है: मैं कभी भी getActionMasked() का उपयोग क्यों करना चाहूंगा? क्या GetAction() पर इसका कभी फायदा होता है? – peedee

+3

@peedee 'getAction()' के साथ, आपको डेटा के इन दो टुकड़ों को अलग करने के लिए बिट्सफ़िफ्ट/मास्क करना होगा; जबकि 'getActionMasked() 'और' getActionIndex()' के साथ आप उन्हें अलग-अलग मिलते हैं (लेकिन शायद दो अलग-अलग फ़ंक्शन कॉल के कारण, उच्च रनटाइम लागत पर)। मैं कल्पना करता हूं कि 'getAction()' द्वारा लौटा गया संयुक्त प्रतिनिधित्व एंड्रॉइड ओएस में आंतरिक रूप से उपयोग किया जाता है, क्योंकि इस तरह से दो मूल्यों को संयुक्त किया जाता है क्योंकि मोबाइल हार्डवेयर पर कैश-कुशल होता है, यह ध्यान में रखते हुए कि टच एपीआई हालिया टच इवेंट्स का इतिहास भी संग्रहीत करता है, इसलिए इनमें से कई डेटा संग्रहीत किए जा सकते हैं .. –

संबंधित मुद्दे