2012-03-23 6 views
6

में एक व्यूपेगर के अंदर रखे ग्रिड व्यू पर एक स्वाइप का सही ढंग से पता लगाने के लिए मेरे पास एक व्यूपेजर है जो पृष्ठों के लिए ग्रिड व्यू का उपयोग करता है। जब मैं स्क्रीन पर स्वाइप करता हूं तो मैं ViewPager पृष्ठों को स्विच करना चाहता हूं।एंड्रॉइड

समस्या यह है कि जब वे ग्रिड व्यू में बने होते हैं तो स्वाइप का पता नहीं लगाया जाता है। ग्रिड व्यू के बाहर, स्वाइप सही तरीके से काम करते हैं; ऐसा लगता है कि ग्रिड व्यू दृश्यपेजर को पहले पास किए बिना सभी स्पर्श घटनाओं को फँस रहा है।

स्रोत कोड के साथ नगण्य है, मैं GridView से बढ़ाया एक कस्टम वर्ग के लिए ऐसा किया:

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    return pager.onInterceptTouchEvent(event); 
} 

- जहां pager ViewPager वर्ग को दर्शाता है। इसके साथ, ViewPager सही ढंग से स्वाइप का पता लगाएगा और तदनुसार पृष्ठों को ले जाएगा, लेकिन यह ग्रिड व्यू को किसी भी घटना को स्वीकार करने की अनुमति नहीं देता है, इसलिए मैं आइटम पर क्लिक नहीं कर सकता।

मैं क्या करने में सक्षम होना चाहता हूं, ViewPager में स्वाइप का पता लगाने और ग्रिड व्यू पर आइटम क्लिक सही ढंग से पता लगाता है।

+0

क्या आपको इसके लिए कोई समाधान मिला? – Praneeth

उत्तर

1

आप प्रेषण EVENEMENT जहाँ आप चाहते हैं

2

एलिक्स सही रास्ते पर है के लिए onInterceptTouchEvent ओवरराइड कर सकते हैं। मैं इस सरल दिखने वाले फिक्स के साथ आने में कामयाब रहा। मुझे पूरा यकीन नहीं है कि यह कैसे काम करता है, लेकिन यह करता है! और भविष्य के संदर्भ के लिए, यह अन्य प्रकार के विचारों के लिए भी काम करता है - टेबललाउट, उदाहरण के लिए - न केवल ग्रिड व्यू।

@Override 
public boolean onInterceptTouchEvent(MotionEvent event) { 
    x = event.getX(); 
    y = event.getY(); 
    switch (event.getActionMasked()) { 
    case MotionEvent.ACTION_DOWN: { 
     downX = x; 
     downY = y; 
     return super.onInterceptTouchEvent(event); 
    } 
    case MotionEvent.ACTION_MOVE: { 
     deltaX = Math.abs(downX - x); 
     deltaY = Math.abs(downY - y); 
     return super.onTouchEvent(event); 
    } 
    case MotionEvent.ACTION_UP: { 
     if (deltaX > 4 && deltaY > 4) { 
      super.onTouchEvent(event); 
     } 
    } 
    } 
    return super.onInterceptTouchEvent(event); 
} 
+0

यह काम, सही, thnx है। हल के रूप में उत्तर चिह्नित करें। – olegflo

+0

मेरे लिए यह केवल आगे बढ़ रहा है! नीचे चलना – Praneeth

+0

काम नहीं कर रहा है यह मेरे लिए ठीक काम करता है, लेकिन मैं ग्रिड आइटम पर क्लिक करने में असमर्थ हूं। कोई उपाय? – AndroGeek

6

मैं colig के कार्यान्वयन में समस्या आई, लेकिन मैं इसे ViewPager उपवर्गीकरण और onInterceptTouchEvent() विधि अधिभावी द्वारा काम करने के लिए प्राप्त करने में सक्षम था। यदि आवश्यक हो तो मैंने केवल एक्स दिशा में स्वाइप के लिए जांच की है ताकि लंबवत स्क्रॉलिंग की अनुमति हो।

private static final int minSwipeDistance = 30; 
private float mTouchX; 

@Override 
public boolean onInterceptTouchEvent(MotionEvent event) { 
    boolean response = super.onInterceptTouchEvent(event); 
    float x = event.getX(); 
    switch (event.getActionMasked()) { 
    case MotionEvent.ACTION_DOWN: 
     mTouchX = x; 
     break; 
    case MotionEvent.ACTION_MOVE: 
     float dX = Math.abs(x - mTouchX); 
     if (dX > minSwipeDistance) 
      return true; 
     break; 
    } 
    return response; 
}