2011-06-08 11 views
7

मैं एंड्रॉइड प्रोग्रामिंग और जावा के लिए काफी नया हूं (हालांकि मुझे सी # के साथ कुछ अनुभव है, जिससे मदद मिलती है)।एंड्रॉइड: MotionEvent.ACTION_MOVE का सही उपयोग नहीं कर सकता

इस पल में मैं यह जानने के लिए कुछ चीजों के साथ घूम रहा हूं कि सब कुछ कैसे काम करता है। मैंने एक गतिविधि की है जो टचलिस्टर पर लागू होती है। मैं onTouch अधिरोहित और event.getAction() पर एक स्विच है है:

public boolean onTouch(View v, MotionEvent event) 
{ 
    float x; 
    float y;  

    switch (event.getAction()) 
    { 
     case MotionEvent.ACTION_DOWN: // gets called 
     { 
      x = event.getX(); 
      y = event.getY(); 
      circle c = new circle(this, x, y, 10, 0xFFFFFF); 
      _main.addView(c, tapCount++); 
      break; 
     } 
     case MotionEvent.ACTION_MOVE: // doesnt seem to do anything 
     { 
      x = event.getX(); 
      y = event.getY(); 
      circle c = new circle(this, x, y, 10, 0xFFFFFF); 
      _main.addView(c, tapCount++); 
      break; 
     } 
    } 
    return false; 
} 

कहाँ "सर्कल" एक वर्ग जो एक चक्र खींचता है।

मुझे जो देखने की उम्मीद थी वह सर्किल का निशान था क्योंकि मैंने स्क्रीन पर अपनी उंगली खींच ली थी। स्थिरता में, जब मैं स्पर्श करना शुरू करता हूं तो सर्कल केवल खींचा जा रहा है।

मैंने अपने कोड की तुलना उदाहरणों से की है (उदाहरण के लिए: Google द्वारा यह ब्लॉग पोस्ट: http://android-developers.blogspot.com/2010/06/making-sense-of-multitouch.html) और मुझे मेरी गलती नहीं मिल रही है।

संपादित करें: पूर्ण वर्ग के लिए लिंक: http://pastebin.com/tVDQjQhu

संपादित करें: फिक्स्ड। किसी को टच() फ़ंक्शन में सत्य वापस करना होगा। डी 'ओह!

उत्तर

41

MotionEvent.ACTION_MOVE का उपयोग करते समय मुझे एक ही समस्या हो रही थी। MotionEvent.ACTION_MOVE काम करने के लिए, झूठी जगह के बजाय सत्य लौटें।

+0

+1 क्या आपको कोई विचार है कि यह कैसे काम करता है? क्या आप हमें उस दिशा में इंगित कर सकते हैं जहां यह दस्तावेज है, एक जगह जहां स्पष्टीकरण होगा? धन्यवाद! – Mzn

+3

जब आप बूलियन पर टचवेन्ट को ओवरराइड करते हैं तो आपका रिटर्न बूलियन इंगित करता है कि घटना का उपभोग किया गया था या नहीं। – stealthcopter

1

था वही समस्याएं भी, मैं अगर यह एक बग या नहीं है पता नहीं है, लेकिन मैं इसे कार्यान्वयन के लिए OnClickListener जोड़ने, और फिर public void onClick(View v) को लागू भी निर्माता पर setOnClickListener(this) जोड़कर काम करने में कामयाब रहे।

11

मेरे लिए समाधान के रूप में आप इस

public boolean onTouch(View v, MotionEvent event){ 
float x; 
float y;  

switch (event.getAction()) 
{ 
    case MotionEvent.ACTION_DOWN: // gets called 
    { 
     x = event.getX(); 
     y = event.getY(); 
     circle c = new circle(this, x, y, 10, 0xFFFFFF); 
     _main.addView(c, tapCount++); 
     break; 
    } 
    case MotionEvent.ACTION_MOVE: // doesnt seem to do anything 
    { 
     x = event.getX(); 
     y = event.getY(); 
     circle c = new circle(this, x, y, 10, 0xFFFFFF); 
     _main.addView(c, tapCount++); 
     break; 
    } 
} 
return true; //the problem was here 

}

जब आप onTouch से रिटर्न फाल्स (देखें वी, MotionEvent घटना) का उपयोग करना चाहिए onTouch समारोह में

return true 

था तो केवल मोशनइवेंट.एक्शन_DOWN कहा जाएगा। तो आपको इस फ़ंक्शन से सच होना चाहिए

आशा है कि यह

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