2012-07-27 21 views
32

मैं एक ग्राहक के लिए एक Android 2.2.2 आवेदन के विकास कर रहा हूँ के बजाय View.OnTouchListener का उपयोग कैसे करें और वह निम्न कार्य करना चाहता है:onClick

अब मैं एक onClick ईवेंट के साथ एक बटन है, लेकिन वह नहीं करता है ' टी जैसे, जब वह बटन को छोड़ देता है तो वह विचलित करना चाहता है।

मुझे View.OnTouchListener मिला है जो मुझे लगता है कि मुझे यह उपयोग करने की ज़रूरत है, लेकिन क्या इस घटना को xml पर जोड़ने के लिए कोई सकारात्मकता है जैसे मैंने ऑनक्लिक के साथ किया था?

<ImageButton 
    android:id="@+id/btnSaveNewGate" 
    android:layout_width="@dimen/btnSaveNewGate_width" 
    android:layout_height="@dimen/btnSaveNewGate_height" 
    android:layout_below="@+id/radioGrGateType" 
    android:layout_centerHorizontal="true" 
    android:layout_marginTop="@dimen/btnSaveNewGate_marginTop" 
    android:background="@null" 
    android:contentDescription="@string/layout_empty" 
    android:onClick="onSaveNewGateClick" 
    android:scaleType="fitXY" 
    android:src="@drawable/save_gate_selector" /> 

मैं दो प्रश्न अधिक:

कौन सा जुड़े घटना है जब उपयोगकर्ता अपनी उंगली रिलीज?

क्या कोई दिशा-निर्देश है जो onClick के बजाय View.OnTouchListener का उपयोग करने पर रोक लगाता है?

उत्तर

54

जब उपयोगकर्ता अपनी उंगली जारी करता है तो वह घटना MotionEvent.ACTION_UP है। मुझे पता नहीं है कि क्या कोई दिशानिर्देश हैं जो ऑनक्लिक() के बजाय View.OnTouchListener का उपयोग करने पर रोक लगाते हैं, शायद यह स्थिति की निर्भर करता है। ,

imageButton.setOnTouchListener(new OnTouchListener() { 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     if(event.getAction() == MotionEvent.ACTION_UP){ 

      // Do what you want 
      return true; 
     } 
     return false; 
    } 
}); 
+4

वैकल्पिक रूप से आप event.getAction() पर स्विच का उपयोग कर सकते हैं और मामले MotionEvent.ACTION_UP, MotionEvent.ACTION_DOWN और बहुत आगे होंगे। –

+1

एक प्लस वन पर यह – lionheart

+0

पर क्लिक करने के बजाय MotionEvent.ACTION_DOWN दिखाता है ध्यान दें कि यदि आप वहां झूठी वापसी करते हैं, तो अगर खंड कभी भी आग नहीं लगेगा। देखें: https://stackoverflow.com/a/20359888/564628 –

5

जब उपयोगकर्ता बटन जारी करता है तो ऑनक्लिक ट्रिगर होता है। लेकिन अगर आप अभी भी टच लिस्टनर का उपयोग करना चाहते हैं तो आपको इसे कोड में जोड़ना होगा। यह सिर्फ है:

myView.setOnTouchListener(new View.OnTouchListener() 
{ 
    // Implementation; 
}); 
6

मुमकिन है एक, बल्कि एक OnClickListener से एक OnTouchListener का उपयोग करना चाहता है, तो उसके बाद OnTouchListener की अतिरिक्त कार्यक्षमता की जरूरत है:

यहाँ एक नमूना कोड है। OnTouchListener का उपयोग कैसे किया जा सकता है, इस बारे में अधिक जानकारी दिखाने के लिए यह एक पूरक उत्तर है।

श्रोता

परिभाषित अपनी गतिविधि या टुकड़ा में इस कहीं रखो।

private View.OnTouchListener handleTouch = new View.OnTouchListener() { 

    @Override 
    public boolean onTouch(View v, MotionEvent event) { 

     int x = (int) event.getX(); 
     int y = (int) event.getY(); 

     switch (event.getAction()) { 
      case MotionEvent.ACTION_DOWN: 
       Log.i("TAG", "touched down"); 
       break; 
      case MotionEvent.ACTION_MOVE: 
       Log.i("TAG", "moving: (" + x + ", " + y + ")"); 
       break; 
      case MotionEvent.ACTION_UP: 
       Log.i("TAG", "touched up"); 
       break; 
     } 

     return true; 
    } 
}; 

श्रोता

या onCreateView (एक टुकड़ा के लिए) (एक गतिविधि के लिए) onCreate में श्रोता सेट निर्धारित करें।

myView.setOnTouchListener(handleTouch); 

नोट्स

  • getX और getY आप को देखने के लिए निर्देशांक रिश्तेदार देना (जो है, दृश्य के ऊपर बाईं ओर)। उपरोक्त या आपके दृश्य के बाईं ओर जाने पर वे नकारात्मक होंगे। यदि आप पूर्ण स्क्रीन निर्देशांक चाहते हैं तो getRawX और getRawY का उपयोग करें।
  • आप स्वाइप दिशा जैसी चीज़ों को निर्धारित करने के लिए x और y मानों का उपयोग कर सकते हैं।
संबंधित मुद्दे