2012-08-28 7 views
18

मैंने यह समझने की कोशिश की कि एंड्रॉइड हैंडल टच इवेंट कैसे और थोड़ा उलझन में आया। जो मैं समझता हूं उससे टच इवेंट रूट व्यू पर भेजता है और बच्चों को पास करता है। मेरे पास FrameLayout है जो Fragment के लिए एक कंटेनर है। पहला खंड दृश्य ScrollView है, दूसरा एक Gallery (क्षैतिज लिस्ट व्यू) है और अंतिम वाला भी FrameLayout है। प्रत्येक बार लेआउट में केवल एक टुकड़ा। ऐप उपयोग के लिए, मैं स्क्रीन पर उपयोगकर्ता स्वाइप की पहचान करना चाहता हूं। मैं स्वाइपों की गिनती करना चाहता हूं और कुछ स्वाइप के बाद कुछ करना चाहता हूं।पैरेंट पर टच इवेंट को पकड़ें, इसे संभालें और बच्चों को पास करें

मैं शीर्ष FrameLayout पर एक OnTouchListener डालने की कोशिश की, लेकिन जब बच्चे ScrollView या Gallery है यह कहा जाता है प्राप्त करता है। मैंने के अंत में false और true वापस करने का प्रयास किया, लेकिन मुझे एक ही परिणाम मिल गया - इसे कभी भी नहीं कहा जा रहा है।

मैं यह कैसे कर सकता हूं? मैं सिर्फ "पारदर्शी रूप से" स्पर्श घटनाओं को संभालना चाहता हूं और उन्हें पास करना चाहता हूं जैसे मैंने उन्हें स्पर्श भी नहीं किया।

उत्तर

22

मेरी समझ यह है कि यह वास्तव में दूसरी दिशा में जाता है। बाल विचारों को उनकी घटना को पहले (तरह) ट्रिगर किया जाता है। रूट व्यू को यह dispatchTouchEvent() कहा जाता है, जो घटना को बच्चों के onTouchEvent() पर प्रसारित करता है, और फिर, यह सही या गलत लौटने पर निर्भर करता है, माता-पिता का onTouchEvent() कहा जाता है।

इस तरह बातें अवरोध डालने के लिए सामान्य समाधान तो जैसे एक की गतिविधि में dispatchTouchEvent(MotionEvent ev) ओवरराइड करने के लिए है:

@Override 
public boolean dispatchTouchEvent (MotionEvent ev) { 
    // Do your calcluations 
    return super.dispatchTouchEvent(ev); 
} 

इस एक के लिए दस्तावेज़ here है। ध्यान दें कि आप किसी भी ViewGroup (FrameLayout, आदि) में उस विधि को ओवरराइड भी कर सकते हैं

+0

यह काम किया! मैंने 'फ्रेमलाउट' बढ़ाया है, जिस विधि का आपने उल्लेख किया है, उसे ओवरराइड किया है, और 'मोशनवेन्ट' को 'जेस्चरडेक्टर' में भेजा है। यह सब विषय थोड़ा उलझन में है। धन्यवाद! – Elad92

+0

@ Elad92 जैसा आपने बताया है, क्या आप इस 2 डी स्क्रॉल कोड को बदलने में मेरी मदद कर सकते हैं? https://gist.github.com/LOG-TAG/0505eedccef9e00821da एक GestureDetector_ –

+0

पर मोशनएवेंट को _send करने के तरीके को नहीं मिला, इस http://stackoverflow.com/questions/26354263/catch-ontouch- ईवेंट-बाय-कस्टम-2 डी-स्क्रॉलव्यू-पैरेंट-हैंडल-इट-एंड-पास-टू-चाइल्डर –

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