खोज…


बच्चे और माता-पिता के दृश्य समूह स्पर्श घटनाओं के बीच अंतर कैसे करें

  1. नेस्टेड व्यू समूहों के लिए onTouchEvents() boolean onInceptceptTouchEvent द्वारा प्रबंधित किया जा सकता है।

OnInterceptTouchEvent लिए डिफ़ॉल्ट मान गलत है।

बच्चे से पहले माता-पिता का onTouchEvent प्राप्त होता है। यदि OnInterceptTouchEvent गलत है, तो यह बच्चे के OnTouchEvent हैंडलर को चेन की गति घटना को भेजता है। यदि यह सही है तो अभिभावक स्पर्श कार्यक्रम को संभाल लेंगे।

हालाँकि, ऐसे उदाहरण हो सकते हैं जब हम चाहते हैं कि कुछ बाल तत्व OnTouchEvent s को प्रबंधित करें और कुछ को माता-पिता के दृष्टिकोण (या संभवतः माता-पिता के माता-पिता) द्वारा प्रबंधित किया जाए।

इसे एक से अधिक तरीकों से प्रबंधित किया जा सकता है।

  1. एक तरह से एक बच्चे के तत्व को माता-पिता के OnInterceptTouchEvent से संरक्षित किया जा सकता है, requestDisallowInterceptTouchEvent को लागू करने से है।

सार्वजनिक शून्य अनुरोधDisallowInterceptTouchEvent (बूलियन अस्वीकृत)

यदि कोई तत्व हैंडलर सक्षम है, तो यह इस तत्व के लिए OnTouchEvent को प्रबंधित करने से माता-पिता के किसी भी विचार को रोकता है।

यदि OnInterceptTouchEvent गलत है, तो बाल तत्व के OnTouchEvent का मूल्यांकन किया जाएगा। यदि आपके पास विभिन्न स्पर्श घटनाओं को संभालने वाले बाल तत्वों के भीतर एक विधि है, तो संबंधित कोई भी संबंधित हैंडलर माता-पिता को OnTouchEvent वापस कर देगा।

यह उत्तर:
स्पर्श घटनाओं का प्रसार कैसे होता है, इसका एक दृश्य:
parent -> child|parent -> child|parent -> child views.

यहाँ छवि विवरण दर्ज करें यहाँ से शिष्टाचार

  1. एक और तरीका माता-पिता के लिए OnInterceptTouchEvent से अलग-अलग मान लौटा रहा है।

यह उदाहरण एक व्यूग्रुप में मैनेजिंग टच इवेंट्स से लिया गया है और यह दर्शाता है कि जब उपयोगकर्ता स्क्रॉल कर रहा है तो बच्चे के OnTouchEvent को कैसे इंटरसेप्ट करें।

4 ए।

@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
    /*
     * This method JUST determines whether we want to intercept the motion.
     * If we return true, onTouchEvent will be called and we do the actual
     * scrolling there.
     */


    final int action = MotionEventCompat.getActionMasked(ev);

    // Always handle the case of the touch gesture being complete.
    if (action == MotionEvent.ACTION_CANCEL || action == MotionEvent.ACTION_UP) {
        // Release the scroll.
        mIsScrolling = false;
        return false; // Do not intercept touch event, let the child handle it
    }

    switch (action) {
        case MotionEvent.ACTION_MOVE: {
            if (mIsScrolling) {
                // We're currently scrolling, so yes, intercept the 
                // touch event!
                return true;
            }

            // If the user has dragged her finger horizontally more than 
            // the touch slop, start the scroll

            // left as an exercise for the reader
            final int xDiff = calculateDistanceX(ev); 

            // Touch slop should be calculated using ViewConfiguration 
            // constants.
            if (xDiff > mTouchSlop) { 
                // Start scrolling!
                mIsScrolling = true;
                return true;
            }
            break;
        }
        ...
    }

    // In general, we don't want to intercept touch events. They should be 
    // handled by the child view.
    return false;
}

यह उसी लिंक से कुछ कोड है जो दिखा रहा है कि आपके तत्व के चारों ओर आयत के पैरामीटर कैसे बनाएं:

4 बी।

// The hit rectangle for the ImageButton
myButton.getHitRect(delegateArea);
        
// Extend the touch area of the ImageButton beyond its bounds
// on the right and bottom.
delegateArea.right += 100;
delegateArea.bottom += 100;
        
// Instantiate a TouchDelegate.
// "delegateArea" is the bounds in local coordinates of 
// the containing view to be mapped to the delegate view.
// "myButton" is the child view that should receive motion
// events.
TouchDelegate touchDelegate = new TouchDelegate(delegateArea, myButton);
 
// Sets the TouchDelegate on the parent view, such that touches 
// within the touch delegate bounds are routed to the child.
if (View.class.isInstance(myButton.getParent())) {
    ((View) myButton.getParent()).setTouchDelegate(touchDelegate);
}


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow