2012-11-15 22 views
9

के साथ जेस्चर लाइब्रेरी का उपयोग करना जैसा कि मैंने शीर्षक पर उल्लेख किया है, ऐप में ScrollView और GestureDetector भी है। स्क्रॉलव्यू की टच इवेंट्स के बाहर, जेस्चरडिटेक्टर हैंडलिंग स्वाइप क्रियाएं जैसे बाएं से दाएं और दाएं से बाएं। वे सभी अच्छी तरह से काम कर रहे हैं।स्क्रॉल व्यू

अब मैं GestureLibrary जोड़ना चाहता हूं- मेरा मतलब है कच्चे- गतिविधि के लिए। मैंने अलग-अलग स्रोतों को देखा है और किसी भी तरह से ठीक से जोड़ा गया है। बस, लेआउट इस तरह दिख रहा है:

<android.gesture.GestureOverlayView 
    android:id="@+id/gOverlay" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 

    <ScrollView 
     android:id="@+id/content_scroll" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:scrollbars="none"> 

      </ScrollView> 
      <!-- Other views --> 
</android.gesture.GestureOverlayView> 

यह चित्रण जैसा कि मैं चाहता था (पीली रेखा) लेकिन यह किसी भी तरीके को ट्रिगर नहीं कर रहा है। यहाँ कैसे मैं OnGesturePerformedListener कार्यान्वित:

/* 
    * Gestures 
    */ 
    gLibrary = GestureLibraries.fromRawResource(this, R.raw.gestures); 
    if (!gLibrary.load()) { finish(); } 
    GestureOverlayView gestureOverlayView = (GestureOverlayView) findViewById(R.id.gOverlay); 
    gestureOverlayView.addOnGesturePerformedListener(gestureListener); 

और यहाँ gestureListener है:

private OnGesturePerformedListener gestureListener = new OnGesturePerformedListener() { 
    public void onGesturePerformed(GestureOverlayView overlay, Gesture gesture) { 
     ArrayList<Prediction> predictions = gLibrary.recognize(gesture);    
     if (predictions.size() > 1) { 
      for(Prediction prediction: predictions){ 
       Log.d("Test", "Looking for gestures"); 
      } 
     } 
    } 
}; 

सब है कि। दीवार से, मैंने इस स्रोत कोड को विभिन्न गतिविधि में करने की कोशिश की जिसमें स्क्रॉलव्यू नहीं है और ठीक काम कर रहा है।

अंत में, मैं, यकीन है कि यह GestureDetector के बारे में है नहीं कर रहा हूँ ताकि एप्लिकेशन कैसे डिटेक्टर का उपयोग कर रहा है:

public boolean dispatchTouchEvent(MotionEvent ev) { 
    if (detector != null) { 
     if (detector.onTouchEvent(ev)) { 
      return true; 
     } 
    } 
    return super.dispatchTouchEvent(ev); 
} 

और मेरे SwipeDetector:

private class SwipeDetector extends SimpleOnGestureListener { 
    private static final int SWIPE_MIN_DISTANCE = 120; 
    private static final int SWIPE_MAX_OFF_PATH = 250; 
    private static final int SWIPE_THRESHOLD_VELOCITY = 200; 
    public boolean onFling(android.view.MotionEvent e1, android.view.MotionEvent e2, float velocityX, float velocityY) { 
     if(Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH) { return false; } 
     if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { return false; } 
     if(e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { filterButton.performClick();return true; }   
     return false; 
    } 
} 

मेरे दृष्टिकोण के साथ गलत क्या है?

उत्तर

8

एंड्रॉइड में सभी स्पर्श घटनाएं बच्चों से माता-पिता तक जाती हैं। तो, सभी स्पर्श घटनाओं को स्क्रॉल व्यू संभाल लें, और आप इशारा करते हैं कि डिटेक्टर उन्हें प्राप्त नहीं करता है। आप ScrollView पर स्पर्श श्रोता सेट कर सकते हैं:

scrollView.setOnTouchListener(new OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      if (detector != null) { 
       return detector.onTouchEvent(event); 
      return false; 
     } 
    }); 

आपको लगता है कि पुस्तक के रूप में आवश्यक काम करता है की जाँच करने के लिए है, और आप स्क्रॉल ईवेंट का सेवन नहीं करते।

+0

वह "डिटेक्टर" क्या है? क्या यह स्वाइप डिटेक्टर ऑब्जेक्ट है? –

+0

@RahulHawge, "डिटेक्टर" GestureDetector ऑब्जेक्ट है। – strizzwald

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