इसे ध्वस्त करने का सबसे अच्छा स्थान स्रोत कोड है। डॉक्स इसे स्पष्ट करने के बारे में अपर्याप्त हैं।
dispatchTouchEvent वास्तव में गतिविधि, दृश्य और ViewGroup पर परिभाषित किया गया है। इसे एक नियंत्रक के रूप में सोचें जो यह तय करता है कि स्पर्श घटनाओं को कैसे रूट किया जाए।
उदाहरण के लिए, सरलतम मामला View.dispatchTouchEvent का है, जो टच इवेंट को या तो OnTouchListener.onTouch तक ले जाएगा, यदि यह परिभाषित है या एक्सटेंशन विधि onTouchEvent है ।
के लिए ViewGroup.dispatchTouchEvent चीजें जिस तरह से अधिक जटिल है। यह पता लगाने की जरूरत है कि उसके बच्चे के विचारों में से कौन सा घटना को प्राप्त करना चाहिए (चाइल्ड.डिस्पैचचाउटवेंट को कॉल करके)। यह मूल रूप से एक हिट परीक्षण एल्गोरिथ्म है जहां आप यह पता लगाते हैं कि किस बच्चे के दृश्य की आयत आयत में स्पर्श बिंदु निर्देशांक हैं।
लेकिन इससे पहले कि वह घटना को उपयुक्त बच्चे के दृश्य में भेज सके, माता-पिता सभी को एक साथ घटना की जासूसी और रोक सकते हैं। यह वही है जो onInceptceptTouchEvent के लिए है। इसलिए यह हिट परीक्षण करने से पहले इस विधि को कॉल करता है और यदि ईवेंट को हाइजैक कर लिया गया था (onInceptceptTouchEvent से सही वापस आने पर) यह बच्चे के विचारों के लिए एक ACTION_CANCEL भेजता है ताकि वे अपने टच इवेंट प्रोसेसिंग (पिछले टच इवेंट से) को छोड़ दें और उसके बाद से मूल स्तर पर सभी स्पर्श घटनाओं को onTouchListener.onTouch (यदि परिभाषित किया गया है) या onTouchEvent () में भेजा जाता है । इसके अलावा उस मामले में, onInceptceptTouchEvent को फिर कभी नहीं बुलाया जाता है।
क्या आप [गतिविधि | ViewGroup | View] .dispatchTouchEvent को ओवरराइड करना चाहते हैं? जब तक आप कुछ कस्टम रूटिंग नहीं कर रहे हैं, तो आपको शायद नहीं करना चाहिए।
मुख्य विस्तार विधियाँ ViewGroup.onInterceptTouchEvent हैं यदि आप मूल स्तर पर स्पाई इवेंट और / या इंटरसेप्ट टच इवेंट और मुख्य ईवेंट हैंडलिंग के लिए View.onTouchListener / View.onTouchEvent चाहते हैं।
सभी अपने अति जटिल डिजाइन में इमो लेकिन एंड्रॉइड एपिस सादगी की तुलना में लचीलेपन की ओर अधिक झुकते हैं।