Android: onInterceptTouchEvent और dispatchTouchEvent के बीच अंतर?


249

Android में onInterceptTouchEventऔर क्या अंतर dispatchTouchEventहै?

एंड्रॉइड डेवलपर गाइड के अनुसार, दोनों तरीकों का उपयोग एक टच इवेंट ( MotionEvent) को बाधित करने के लिए किया जा सकता है , लेकिन अंतर क्या है?

कैसे करें onInterceptTouchEvent, dispatchTouchEventऔर onTouchEventदृश्य के पदानुक्रम में एक साथ सहभागिता करें ( ViewGroup)?

जवाबों:


272

इसे ध्वस्त करने का सबसे अच्छा स्थान स्रोत कोड है। डॉक्स इसे स्पष्ट करने के बारे में अपर्याप्त हैं।

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 चाहते हैं।

सभी अपने अति जटिल डिजाइन में इमो लेकिन एंड्रॉइड एपिस सादगी की तुलना में लचीलेपन की ओर अधिक झुकते हैं।


10
यह एक महान, संक्षिप्त जवाब है। अधिक विस्तृत उदाहरण के लिए, प्रशिक्षण "
व्यू

1
@numan salati: "इसके बाद से मूल स्तर पर सभी स्पर्श घटनाओं को onTouchListener.onTouch पर भेज दिया जाता है" - मैं अपने दृश्य समूह में प्रेषण स्पर्श विधि को ओवरराइड करना चाहता हूं और इसे घटनाओं को onTouchListener पर भेजना चाहता हूं। लेकिन मैं यह नहीं देखता कि यह कैसे किया जा सकता है। View.getOnTouchListener ()। OnTouch () के लिए इसके लिए कोई एपीआई नहीं है। एक setOnTouchListener () विधि है, लेकिन कोई getOnTouchListener () विधि नहीं है। फिर यह कैसे किया जा सकता है?
अश्विन

@Ashwin मेरे विचार बिल्कुल, वहाँ setOnInterceptTouchEvent भी नहीं है। आप एक लेआउट में उपयोग के लिए एक उपवर्ग दृश्य को ओवरराइड कर सकते हैं / इसे कोड में जोड़ सकते हैं, लेकिन आप खंड / गतिविधि-स्तरीय rootViews के साथ खिलवाड़ नहीं कर सकते, क्योंकि आप स्वयं खंड (गतिविधि में सबसे अधिक अनुकूलता) की तरह, उन विचारों को उप-लिंक किए बिना नहीं हटा सकते हैं ProgressActivitiy कार्यान्वयन)। API को सादगी के लिए setOnInterceptTouchEvent की जरूरत है। सब लोग रूट-व्यू पर इंटरसेप्टचाउट का उपयोग किसी अर्ध-जटिल ऐप में किसी बिंदु पर करते हैं
leRobot

244

क्योंकि यह Google पर पहला परिणाम है। मैं आपके साथ Youtube पर डेव स्मिथ द्वारा एक महान वार्ता साझा करना चाहता हूं : एंड्रॉइड टच सिस्टम को माहिर करना और स्लाइड यहां उपलब्ध हैं । इसने मुझे Android टच सिस्टम के बारे में एक अच्छी गहरी समझ दी:

गतिविधि कैसे स्पर्श को संभालती है:

  • Activity.dispatchTouchEvent()
    • हमेशा सबसे पहले कहा जाता है
    • विंडो से जुड़ी हुई रूट को देखने के लिए ईवेंट भेजता है
    • onTouchEvent()
      • यदि कोई दृश्य ईवेंट का उपभोग करता है तो उसे कॉल किया जाता है
      • हमेशा कहा जाता है

टच कैसे देखें हैंडल:

  • View.dispatchTouchEvent()
    • यदि पहले मौजूद हो तो श्रोता को घटना भेजता है
      • View.OnTouchListener.onTouch()
    • यदि भस्म नहीं किया जाता है, तो स्पर्श को संसाधित करता है
      • View.onTouchEvent()

एक ViewGroup हैंडल कैसे स्पर्श करता है:

  • ViewGroup.dispatchTouchEvent()
    • onInterceptTouchEvent()
      • जांचें कि क्या यह बच्चों को सुपरसीड करना चाहिए
      • पासेस ACTION_CANCEL सक्रिय बच्चे को
      • यदि यह एक बार सच हो जाता है, तो ViewGroupबाद की सभी घटनाओं का उपभोग करता है
    • प्रत्येक बच्चे को देखने के लिए (रिवर्स ऑर्डर में उन्हें जोड़ा गया था)
      • यदि स्पर्श प्रासंगिक है (दृश्य के अंदर), child.dispatchTouchEvent()
      • यदि यह एक पिछले द्वारा नियंत्रित नहीं किया जाता है, तो अगले दृश्य को भेजें
    • यदि कोई भी बच्चा इस आयोजन को नहीं संभालता है, तो श्रोता को मौका मिलता है
      • OnTouchListener.onTouch()
    • अगर कोई सुनने वाला नहीं है, या उसके हाथ नहीं है
      • onTouchEvent()
  • इंटरप्टेड ईवेंट्स चाइल्ड स्टेप पर कूदते हैं

वह github.com/devunwired/ पर कस्टम टच का उदाहरण कोड भी प्रदान करता है ।

उत्तर: मूल रूप से dispatchTouchEvent()प्रत्येक Viewपरत पर यह निर्धारित करने के लिए कहा जाता है कि क्या एक Viewचल रहे इशारे में दिलचस्पी है। एक में उसकी में स्पर्श घटनाओं चोरी करने की क्षमता है , -method से पहले ही कहेंगे बच्चों पर। केवल तभी भेजने बंद कर देंगे -method रिटर्न सच। अंतर यह है कि है भेजने है और बताता है कि इसे रोकने चाहिए (नहीं भेजने बच्चों को) या नहीं (बच्चों को भेजने)ViewGroupViewGroupdispatchTouchEvent()dispatchTouchEvent()ViewGroupViewGroup onInterceptTouchEvent()dispatchTouchEvent()MotionEventsonInterceptTouchEventMotionEvent

आप एक दृश्य समूह के कोड की कल्पना कर सकते हैं जो कम-से-कम यह (बहुत सरलीकृत) कर रहा है:

public boolean dispatchTouchEvent(MotionEvent ev) {
    if(!onInterceptTouchEvent()){
        for(View child : children){
            if(child.dispatchTouchEvent(ev))
                return true;
        }
    }
    return super.dispatchTouchEvent(ev);
}

64

अनुपूरक उत्तर

अन्य उत्तरों के लिए यहां कुछ दृश्य पूरक हैं। मेरा पूरा जवाब यहाँ है

यहां छवि विवरण दर्ज करें

यहां छवि विवरण दर्ज करें

यह चुनने के लिए उपयोग की dispatchTouchEvent()विधि कि क्या इसे तुरंत स्पर्श घटना (साथ ) को संभालना चाहिए या अपने बच्चों के तरीकों को सूचित करना जारी रखना चाहिए ।ViewGrouponInterceptTouchEvent()onTouchEvent()dispatchTouchEvent()


OnInterceptTouchEvent को गतिविधि में भी कहा जा सकता है ?? मुझे लगता है कि यह केवल एक ViewGroup में संभव है या मैं गलत हूं? @ सार्गच
फेडेरिको रिज़ो

@FedericoRizzo, आप सही कह रहे हैं! आपका बहुत बहुत धन्यवाद! मैंने आरेख और मेरे उत्तर को अपडेट किया।
सुरगाच

20

इन तरीकों के बारे में बहुत भ्रम है, लेकिन यह वास्तव में उतना जटिल नहीं है। अधिकतर भ्रम इसीलिए है क्योंकि:

  1. यदि आपका View/ViewGroupया उसका कोई बच्चा सच में वापस नहीं आता है onTouchEvent, dispatchTouchEventऔर onInterceptTouchEventकेवल उसी के लिए बुलाया जाएगा MotionEvent.ACTION_DOWN। बिना किसी सत्य से onTouchEvent, माता-पिता के विचार से आपके विचार को MotionEvents की आवश्यकता नहीं होगी।
  2. जब कोई व्यूग्रुप का कोई भी बच्चा onTouchEvent में सच नहीं होता है, तो onInterceptTouchEvent को केवल उसी के लिए बुलाया जाएगा MotionEvent.ACTION_DOWN, भले ही आपका ViewGroup सच में वापस आ जाए onTouchEvent

प्रसंस्करण क्रम इस प्रकार है:

  1. dispatchTouchEvent कहा जाता है।
  2. onInterceptTouchEventके लिए कहा जाता है MotionEvent.ACTION_DOWNया जब ViewGroup के किसी भी बच्चे में सच लौटे onTouchEvent
  3. onTouchEventपहले व्यूग्रुप के बच्चों को बुलाया जाता है और जब कोई भी बच्चा सही नहीं होता है तो उसे कॉल किया जाता है View/ViewGroup

यदि आप TouchEvents/MotionEventsअपने बच्चों पर घटनाओं को अक्षम किए बिना पूर्वावलोकन करना चाहते हैं , तो आपको दो काम करने होंगे:

  1. dispatchTouchEventघटना का पूर्वावलोकन करने और लौटने के लिए ओवरराइड करें super.dispatchTouchEvent(ev);
  2. ओवरराइड करें onTouchEventऔर सही लौटें, अन्यथा आपको MotionEvent छोड़कर कोई नहीं मिलेगा MotionEvent.ACTION_DOWN

यदि आप अपने बच्चों पर अन्य घटनाओं को अक्षम किए बिना, जब तक आप इशारे का पता नहीं लगाते, तब तक आप स्वाइप इवेंट जैसे कुछ इशारों का पता लगा सकते हैं, आप इसे इस तरह से कर सकते हैं:

  1. ऊपर बताए अनुसार मोशनवाइज का पूर्वावलोकन करें और जब आपने अपने हावभाव का पता लगाया तो एक ध्वज सेट करें।
  2. onInterceptTouchEventजब आपका ध्वज आपके बच्चों द्वारा MotionEvent प्रसंस्करण को रद्द करने के लिए सेट किया गया हो , तो सही लौटें । यह आपके ध्वज को रीसेट करने के लिए एक सुविधाजनक स्थान भी है, क्योंकि onInterceptTouchEvent को अगले तक फिर से नहीं बुलाया जाएगा MotionEvent.ACTION_DOWN

एक में ओवरराइड का उदाहरण FrameLayout(मेरा उदाहरण C # है जैसा कि मैं Xamarin एंड्रॉइड के साथ प्रोग्रामिंग कर रहा हूं, लेकिन जावा में तर्क समान है:

public override bool DispatchTouchEvent(MotionEvent e)
{
    // Preview the touch event to detect a swipe:
    switch (e.ActionMasked)
    {
        case MotionEventActions.Down:
            _processingSwipe = false;
            _touchStartPosition = e.RawX;
            break;
        case MotionEventActions.Move:
            if (!_processingSwipe)
            {
                float move = e.RawX - _touchStartPosition;
                if (move >= _swipeSize)
                {
                    _processingSwipe = true;
                    _cancelChildren = true;
                    ProcessSwipe();
                }
            }
            break;
    }
    return base.DispatchTouchEvent(e);
}

public override bool OnTouchEvent(MotionEvent e)
{
    // To make sure to receive touch events, tell parent we are handling them:
    return true;
}

public override bool OnInterceptTouchEvent(MotionEvent e)
{
    // Cancel all children when processing a swipe:
    if (_cancelChildren)
    {
        // Reset cancel flag here, as OnInterceptTouchEvent won't be called until the next MotionEventActions.Down:
        _cancelChildren = false;
        return true;
    }
    return false;
}

3
मुझे नहीं पता कि यह अधिक upvotes क्यों नहीं है। यह एक अच्छा जवाब है (IMO) और मुझे यह बहुत मददगार लगा।
मार्क ऑर्मेशर

8

मुझे इस वेबपेज http://doandroids.com/blogs/tag/codeexample/ पर बहुत सहज स्पष्टीकरण आया । वहां से लिया गया:

  • बूलियन onTouchEvent (MotionEvent ev) - जब भी लक्ष्य के रूप में इस दृश्य के साथ एक स्पर्श घटना का पता चलता है, तब बुलाया जाता है
  • बूलियन onInterceptTouchEvent (MotionEvent ev) - जब भी कोई टच इवेंट इस ViewGroup या लक्ष्य के रूप में एक बच्चे के साथ पाया जाता है। यदि यह फ़ंक्शन सही हो जाता है, तो MotionEvent को इंटरसेप्ट किया जाएगा, जिसका अर्थ है कि इसे बच्चे को पास नहीं किया जाएगा, बल्कि इस व्यू के onTouchEvent पर दिया जाएगा।

2
सवाल onInterceptTouchEvent और dispatchTouchEvent के बारे में है। दोनों onTouchEvent से पहले कॉल कर रहे हैं। लेकिन उस उदाहरण में आप प्रेषण नहीं देख सकते।
दिनमान

8

dispatchTouchEvent onInterceptTouchEvent से पहले संभालती है।

इस सरल उदाहरण का उपयोग करना:

   main = new LinearLayout(this){
        @Override
        public boolean onInterceptTouchEvent(MotionEvent ev) {
            System.out.println("Event - onInterceptTouchEvent");
            return super.onInterceptTouchEvent(ev);
            //return false; //event get propagated
        }
        @Override
        public boolean dispatchTouchEvent(MotionEvent ev) {
            System.out.println("Event - dispatchTouchEvent");
            return super.dispatchTouchEvent(ev);
            //return false; //event DONT get propagated
        }
    };

    main.setBackgroundColor(Color.GRAY);
    main.setLayoutParams(new LinearLayout.LayoutParams(320,480));    


    viewA = new EditText(this);
    viewA.setBackgroundColor(Color.YELLOW);
    viewA.setTextColor(Color.BLACK);
    viewA.setTextSize(16);
    viewA.setLayoutParams(new LinearLayout.LayoutParams(320,80));
    main.addView(viewA);

    setContentView(main);

आप देख सकते हैं कि लॉग विल की तरह होगा:

I/System.out(25900): Event - dispatchTouchEvent
I/System.out(25900): Event - onInterceptTouchEvent

तो अगर आप इन 2 हैंडलर के साथ काम कर रहे हैं तो पहली घटना को संभालने के लिए dispatchTouchEvent का उपयोग करें, जो onInceptceptTouchEvent पर जाएगी।

एक और अंतर यह है कि अगर डिस्पैचच्यूवेंट वापसी 'गलत' है, तो ईवेंट को बच्चे को प्रचारित नहीं किया जाता है, इस मामले में एडिट टेक्स्ट।


5

संक्षिप्त उत्तर: सबसे पहलेdispatchTouchEvent() कहा जाएगा ।

छोटी सलाह:dispatchTouchEvent() क्योंकि इसे नियंत्रित करना मुश्किल है, कभी-कभी इसे ओवरराइड नहीं करना चाहिए , कभी-कभी यह आपके प्रदर्शन को धीमा कर सकता है। IMHO, मेरा सुझाव है कि ओवरराइडिंग onInterceptTouchEvent()


क्योंकि अधिकांश उत्तर गतिविधि / दृश्य समूह / दृश्य पर प्रवाह स्पर्श घटना के बारे में स्पष्ट रूप से स्पष्ट रूप से उल्लेख करते हैं, मैं केवल इन तरीकों पर कोड के बारे में अधिक विवरण जोड़ता हूं ViewGroup(अनदेखा dispatchTouchEvent()):

onInterceptTouchEvent()पहले कहा जाएगा, कार्रवाई घटना क्रमशः नीचे बुलाया जाएगा -> चाल -> ऊपर। 2 मामले हैं:

  1. यदि आप 3 मामलों में गलत लौटते हैं (ACTION_DOWN, ACTION_MOVE, ACTION_UP), तो यह विचार करेगा कि माता-पिता को इस स्पर्श कार्यक्रम की आवश्यकता नहीं होगी , इसलिए onTouch()माता-पिता कभी फोन नहीं करते , लेकिन onTouch()बच्चे इसके बजाय फोन करेंगे ; हालाँकि कृपया ध्यान दें:

    • onInterceptTouchEvent()अभी भी, स्पर्श घटना प्राप्त करने के लिए जब तक अपने बच्चों को फोन नहीं है जारी रखने के लिए requestDisallowInterceptTouchEvent(true)
    • यदि उस घटना को प्राप्त करने वाले बच्चे नहीं हैं (यह 2 मामलों में हो सकता है: उपयोगकर्ताओं को छूने की स्थिति में कोई भी बच्चा नहीं है, या बच्चे हैं लेकिन यह ACTION_DOWN पर गलत है), माता-पिता उस घटना onTouch()को माता-पिता को वापस भेज देंगे ।
  2. इसके विपरीत, यदि आप सच में लौटते हैं , तो माता-पिता तुरंत इस स्पर्श घटना को चुरा लेंगे , और onInterceptTouchEvent()तुरंत रोक देंगे, onTouch()माता-पिता को बुलाया जाएगा और साथ ही सभी onTouch()बच्चों को अंतिम क्रिया कार्यक्रम प्राप्त होगा - ACTION_CANCEL (इस प्रकार, इसका मतलब माता-पिता है स्पर्श घटना को चुरा लिया, और बच्चे तब से इसे संभाल नहीं सकते)। onInterceptTouchEvent()रिटर्न फ़ाल्स का प्रवाह सामान्य है, लेकिन रिटर्न ट्रू केस के साथ थोड़ा भ्रम है, इसलिए मैं इसे यहां सूचीबद्ध करता हूं:

    • ACTION_DOWN पर सही लौटें, onTouch()माता-पिता को फिर से ACTION_DOWN और निम्न क्रियाएं (ACTION_MOVE, ACTION_UP) प्राप्त होंगी।
    • onTouch()माता-पिता की ACTION_MOVE पर सही लौटें, अगले ACTION_MOVE (समान ACTION_MOVE onInterceptTouchEvent()) और निम्न क्रियाओं (ACTION_MOVE, ACTION_UP) को प्राप्त करेंगे।
    • ACTION_UP पर सच लौटें, onTouch()के माता पिता होगा नहीं बिल्कुल भी कहा जाता है, क्योंकि यह बहुत देर हो चुकी माता-पिता स्पर्श घटना चोरी करने के लिए है।

एक और महत्वपूर्ण बात यह है कि घटना का ACTION_DOWN onTouch()यह निर्धारित करेगा कि दृश्य उस घटना से अधिक कार्रवाई प्राप्त करना चाहता है या नहीं। यदि दृश्य ACTION_DOWN में सही है onTouch(), तो इसका मतलब है कि दृश्य उस घटना से अधिक कार्रवाई करने को तैयार है। अन्यथा, ACTION_DOWN पर गलत तरीके से वापस आएँगे onTouch()जिससे यह माना जाएगा कि उस घटना से दृश्य को कोई और कार्रवाई नहीं मिलेगी।


4

आप इस वीडियो में इसका जवाब https://www.youtube.com/watch?v=SYoN-OvdZ3M&list=PLonJJ3BVjZW6CtAMbJz1XD8ELUs1xaTD&index=19 और अगले 3 वीडियो में पा सकते हैं । सभी स्पर्श घटनाओं को बहुत अच्छी तरह से समझाया गया है, यह बहुत स्पष्ट है और उदाहरणों से भरा है।


ये वास्तव में अच्छे वीडियो हैं, मैंने कुछ देखा और इसने मेरी समस्या हल कर दी।
शमौन

3

व्यूग्रुप उपवर्ग के भीतर निम्न कोड माता-पिता के कंटेनरों को स्पर्श घटनाओं को प्राप्त करने से रोक देगा:

  @Override
  public boolean dispatchTouchEvent(MotionEvent ev) {
    // Normal event dispatch to this container's children, ignore the return value
    super.dispatchTouchEvent(ev);

    // Always consume the event so it is not dispatched further up the chain
    return true;
  }

मैंने पृष्ठभूमि दृश्य को स्पर्श घटनाओं पर प्रतिक्रिया देने से रोकने के लिए एक कस्टम ओवरले के साथ इसका उपयोग किया।


1

मुख्य अंतर :

• Activity.dispatchTouchEvent (MotionEvent) - यह आपकी गतिविधि को विंडो में भेजने से पहले सभी स्पर्श घटनाओं को अवरोधन करने की अनुमति देता है।
• ViewGroup.onInterceptTouchEvent (MotionEvent) - यह एक व्यूग्रुप को घटनाओं को देखने की अनुमति देता है क्योंकि वे बाल दृश्य में भेज दिए जाते हैं।


1
हां, मुझे यह उत्तर एंड्रॉइड देव गाइड से पता है - फिर भी अस्पष्ट है। केवल एक गतिविधि के लिए एक ViewGroup के लिए भी पद्धति dispatchTouchEvent मौजूद है। मेरा प्रश्न था, तीन तरीके कैसे प्रेषण करते हैं, onInceptceptTouchEvent और onTouchEvent व्यूग्रुप्स के एक पदानुक्रम जैसे RelativeLayouts के भीतर एक साथ बातचीत करते हैं।
ऐनी ड्रॉयड

1

व्यूग्रुप onInterceptTouchEvent()हमेशा ACTION_DOWNघटना के लिए प्रवेश बिंदु होता है जो कि पहली घटना होती है।

यदि आप इस इशारे को संसाधित करने के लिए ViewGroup चाहते हैं, तो इससे वापस लौटें onInterceptTouchEvent()। सच लौटने पर, ViewGroup के onTouchEvent()अगले तक बाद के सभी घटनाओं प्राप्त होगा ACTION_UPया ACTION_CANCEL, और ज्यादातर मामलों में, के बीच स्पर्श घटनाओं ACTION_DOWNऔर ACTION_UPया ACTION_CANCELकर रहे हैं ACTION_MOVE, जो आम तौर पर स्क्रॉल / इशारों लात के रूप में मान्यता दी जाएगी।

यदि आप झूठे से लौटते हैं onInterceptTouchEvent(), तो लक्ष्य का दृश्य onTouchEvent()कहा जाएगा। यह बाद के संदेशों के लिए दोहराया जाएगा जब तक कि आप सच से नहीं लौटते onInterceptTouchEvent()

स्रोत: http://neevek.net/posts/2013/10/13/implementing-onInterceptTouchEvent-and-onTouchEvent-for-ViewGroup.html


0

एक्टिविटी और व्यू दोनों में विधि प्रेषण है। उन तरीकों का रिटर्न प्रकार बूलियन है, आप वापसी मूल्य के माध्यम से प्रेषण मार्ग को नियंत्रित कर सकते हैं।

Android में घटना प्रेषण गतिविधि-> ViewGroup-> दृश्य से शुरू होता है।


0
public boolean dispatchTouchEvent(MotionEvent ev){
    boolean consume =false;
    if(onInterceptTouchEvent(ev){
        consume = onTouchEvent(ev);
    }else{
        consume = child.dispatchTouchEvent(ev);
    }
}

1
क्या आप कुछ स्पष्टीकरण जोड़ सकते हैं?
पॉल फ्लॉयड

3
हालांकि यह कोड स्निपेट प्रश्न को हल कर सकता है, जिसमें स्पष्टीकरण सहित वास्तव में आपकी पोस्ट की गुणवत्ता में सुधार करने में मदद करता है। याद रखें कि आप भविष्य में पाठकों के लिए प्रश्न का उत्तर दे रहे हैं, और उन लोगों को आपके कोड सुझाव के कारणों का पता नहीं चल सकता है।
रोजारियो परेरा फर्नांडीस

-2

छोटा जवाब:

onInceptceptTouchEvent setOnTouchListener से पहले आता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.