2011-04-19 6 views
24

मेरा प्रश्न सरल है, जेस्चर लिस्टनर को लागू करते समय ऑनअप ईवेंट कहां है?GestureDetector पर ऑनअप ईवेंट

मेरे पास जेस्चरेटेक्टर पर बहुत सी घटनाएं हैं, और श्रोता के ऑन अप ईवेंट का उपभोग नहीं कर सकते हैं, क्योंकि घटनाओं में से एक पर चल रहा है SingleTap पुष्टि की है कि इसकी आवश्यकता है।

+0

मैं पूरी तरह यकीन है कि क्या आप यहाँ क्या करना चाहते हैं नहीं कर रहा हूँ, लेकिन वहाँ 'जी में है' onSingleTapUp' estureListener' जो हो सकता है कि आप क्या देख रहे हैं। इसे पूरी तरह से टैप पर निकाल दिया जाता है, हालांकि, स्वाइप नहीं किया जाता है। इसके लिए आप 'GestureDetector' को पास किए बिना दृश्य/गतिविधि के "कच्चे" पर टचवेन्ट को संसाधित कर सकते हैं। – Xion

+1

ऑनिंगिंगटैप को निकाल दिया जाता है जब एक टैप किया जाता है। मुझे नीचे की जरूरत है, फिर आगे बढ़ें, और यूपी के साथ खत्म करें। –

+0

यह 'ऑनफलिंग' है, सिवाय इसके कि आपको MOVE ईवेंट नहीं मिलते हैं। अगर आपको उनकी ज़रूरत है, तो मुझे लगता है कि आपका एकमात्र विकल्प 'ऑन टचवेन्ट' को सीधे संभालना है। – Xion

उत्तर

23

onFling() का उपयोग करने का प्रयास करें। एक अजीब नाम की तरह लगता है लेकिन मेरे लिए, यह onUp() विधि के रूप में काम करता है तर्कसंगत रूप से काम करेगा। या फिर इस विधि

@Override 
public boolean onTouchEvent(MotionEvent me) { 

    Log.v("ADAM", "ontouch: " + me.getAction()); 

    if(me.getAction() == 0){ 
    Log.v("ADAM", "Down"); 
    } 
    else if (me.getAction() == 1) { 
    Log.v("ADAM", "Up"); 
    } 
    else if (me.getAction() == 2) { 
    Log.v("ADAM", "Scroll"); 
    } 
    boolean detectedUp = event.getAction() == MotionEvent.ACTION_UP; 
    if (!mGestureDetector.onTouchEvent(event) && detectedUp) { 
    return onUp(event); 
    } 
    return true; 
} 
+1

मैं इसे जेस्चर लिस्टनर (ऑनफ्लिंग पूर्ण बेकार है) से गुजरने से पहले इसे हल करके हल करता हूं –

+0

ग्रेट उत्तर, बस यह जोड़ना चाहता था कि ऑनफ्लिंग पूरी तरह से बेकार नहीं है - यह आपको स्क्रॉल और स्वाइप के बीच अंतर करने में मदद करता है। यद्यपि आपको लगता है कि आप केवल अपनी उंगली उठा रहे हैं, तो आप अक्सर झुकाव प्राप्त करते हैं, फिर भी आप ऑनफ्लिंग हैंडलर में वेग पैरामीटर की जांच करके महत्वहीन लोगों को स्क्रीन कर सकते हैं। –

+15

ऑनफ्लिंग ईवेंट तब होता है जब आप स्वाइप करते हैं। सबसे विशेष रूप से, यदि आप स्वाइप करते हैं लेकिन इसे उठाने से पहले एक पल के लिए अपनी अंगुली को आगे बढ़ना बंद करते हैं, तो अक्सर कोई घटना नहीं होती है। –

4

इससे पहले कि मैं यह GestureListener

img.setOnTouchListener(new OnTouchListener() { 
    @Override 
    public boolean onTouch(View arg0, MotionEvent arg1) { 
     if (arg1.getAction() == MotionEvent.ACTION_UP 
      && !getDocument().isScaled()) 
     img.notifyUp(); 
     return gestures.onTouchEvent(arg1); 
    } 
}); 
2

को पारित करने की कोशिश ... मैं Action event पढ़कर यह तय आप अन्य घटनाओं आप अपने GestureDetector.OnGestureListener में उपभोग से सच वापस आ गए ? मुझे यह समस्या थी और यह पता चला कि क्या आप झूठी वापसी करते हैं, तो सिस्टम मानता है कि आप रुचि नहीं रखते हैं और आपको घटनाओं को पार करना बंद कर देते हैं, तो आप इसे याद करते हैं!

2

अन्य उत्तरों प्रश्न हल कर सकते हैं, शायद वे अच्छे काम करते हैं, लेकिन मुझे नहीं लगता कि वे अच्छे समाधान हैं।
क्योंकि हमें किसी भी मोउडल में ईवेंट से निपटना चाहिए, ताकि हम कोड को बनाए रखने या विस्तारित करने के लिए esaier हो सकें।
(वैसे, डॉन onFilng() का उपयोग नहीं है, अगर अपनी अंगुली को स्क्रीन पर धीरे-धीरे ले जाते हैं, onFilng() काम नहीं होगा)
तो, मेरे समाधान GestureDetector पुनर्लेखन है:

public class ModifyGestureDetector extends GestureDetector { 

    MyGestureListener myGestureListener; 

    public ModifyGestureDetector(Context context, OnGestureListener listener) { 
     super(context, listener); 
     init(listener); 
    } 

    void init(OnGestureListener listener){ 
     if (listener instanceof MyGestureListener){ 
      myGestureListener = (MyGestureListener) listener; 
     } 
    } 

    //u can write something more complex as long as u need 
    @Override 
    public boolean onTouchEvent(MotionEvent ev) { 
     if(ev.getAction() == MotionEvent.ACTION_UP 
      && myGestureListener != null){ 
      myGestureListener.onUp(ev); 
     } 
     return super.onTouchEvent(ev); 
    } 

    public interface MyGestureListener{ 
     public void onUp(MotionEvent ev); 
    } 
} 

और श्रोता :

public class MyGestureListener extends GestureDetector.SimpleOnGestureListener 
     implements ModifyGestureDetector.MyGestureListener { 


    @Override 
    public void onUp(MotionEvent ev) { 
     //do what u want 
    } 
} 

:)

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