2011-10-03 16 views
17

क्या कोई मुझे बता सकता है कि onTouchEvent क्यों दो बार निष्पादित किया गया है और मैं इसे केवल एक बार चलाने के लिए कैसे सेट कर सकता हूं? मुझे स्पष्टीकरण नहीं मिला। धन्यवाद।onTouchEvent दो बार निष्पादित करता है

@Override 
public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
    _iv = new ImageView(this); 

    _map = BitmapFactory.decodeResource(getResources(), R.drawable.image); 

     _iv.setImageBitmap(_map); 
     _iv.invalidate(); 

    setContentView(_iv); 
} 

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    double X = event.getX(); 
    double Y = event.getY(); 

    Toast.makeText(this, "X: " + X + " Y: " + Y, Toast.LENGTH_SHORT).show(); 

    return super.onTouchEvent(event); 
} 

उत्तर

34

यह हर घटना के लिए निष्पादित करता है। इस मामले में यह ACTION_DOWN और ACTION_UP ईवेंट के लिए होगा। यह कई बार, कई बार ACTION_MOVE घटना के लिए निष्पादित करेगा।

switch(event.getAction()) 
{ 
    case MotionEvent.ACTION_DOWN: 
    ** CODE ** 
    break; 
    case MotionEvent.ACTION_MOVE: 
    ** CODE ** 
    break; 
    case MotionEvent.ACTION_UP: 
    ** CODE ** 
    break; 
} 
+0

हाय डेव, मैंने मानचित्र के स्पर्श पर मार्कर लगाने के लिए टचएवेंट पर उपयोग किया। लेकिन मैंने पाया कि ऑनऑचवेन्ट विधि को कई बार कहा जाता है। जैसा कि यहां वर्णित है, मैंने उसी स्विच केस का उपयोग किया था। लेकिन फिर भी मेरी विधि को कई बार बुलाया जाता है। क्या आप कृपया मुझे सुझाव दे सकते हैं कि यह क्यों हो रहा है – Scorpion

+4

एंड्रॉइड आमतौर पर टचवेन्ट्स पर विचार करता है जब तक कि उनमें से कोई "सत्य" नहीं लौटाता। यदि आपका स्पर्श ईवेंट पूरी तरह से संभाला गया है और इसे रोकना चाहिए तो "सत्य" लौटें। – DeeV

+0

ठीक है। आपके त्वरित उत्तर के लिए धन्यवाद। मैं कोशिश करूँगा – Scorpion

-2

स्विच बयान में सभी घटनाओं आप की जरूरत नहीं है के लिए रिटर्न फाल्स:

यह केवल एक घटना में निष्पादित कुछ इस तरह करते हैं करने के लिए।

+1

पिछले पोस्टर के समान उदाहरण जोड़ें? अन्यथा, यह टिप्पणियां कुछ भी नहीं जोड़ती हैं। – coatless

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