2010-06-30 21 views
19

मैं एंड्रॉइड टच फोन पर उंगली आंदोलन दिशा को पकड़ना चाहता हूं। यदि कोई उपयोगकर्ता अपनी अंगुली को ऊपर/नीचे/बाएं/दाएं दिशा में स्लाइड करता है, तो मैं इस दिशा को कैप्चर करना चाहता हूं। मैं यह कैसे ढूंढ सकता हूं? धन्यवाद।एंड्रॉइड फोन में उंगली आंदोलन दिशा कैसे प्राप्त करें?

उत्तर

38

लागू onTouchEvent(), और जहाँ उपयोगकर्ता नीचे प्रेस और लिफ्टों द्वारा dx और डीवाई गणना। आप इस मूल्य का उपयोग कदम की दिशा जानने के लिए कर सकते हैं।

float x1, x2, y1, y2, dx, dy; 
String direction; 
switch(event.getAction()) { 
    case(MotionEvent.ACTION_DOWN): 
     x1 = event.getX(); 
     y1 = event.getY(); 
     break; 

    case(MotionEvent.ACTION_UP): { 
     x2 = event.getX(); 
     y2 = event.getY(); 
     dx = x2-x1; 
     dy = y2-y1; 

     // Use dx and dy to determine the direction of the move 
     if(Math.abs(dx) > Math.abs(dy)) { 
      if(dx>0) 
       direction = "right"; 
      else 
       direction = "left"; 
     } else { 
      if(dy>0) 
       direction = "down"; 
      else 
       direction = "up"; 
     } 
    } 
} 
+4

अच्छा जवाब लेकिन मुझे कुछ टाइपो मिल गए और स्विच के अंदर से उन्हें परिवर्तनीय बनाने के लिए उन चरों में से कुछ को एक उच्च दायरे में लाना पड़ा। –

+1

दूसरे स्विच केस के लिए मैंने ACTION_UP के बजाय ACTION_MOVE का उपयोग किया क्योंकि ViewPager स्वाइप में ACTION_UP के बिना आक्रमण किया जाता है। मेरे पास एक ViewGroup द्वारा आयोजित स्क्रॉलव्यू डब्ल्यू/लंबवत अभिविन्यास है और यह एक व्यूपेजर पृष्ठ है। ScrollView पर स्वाइप करें प्रतिक्रिया देने के बजाय पृष्ठ बदलता है। केस मोशनइवेंट.एक्शन_MOVE: फ्लोट डीएक्स = event.getX() - x1; फ्लोट dy = event.getY() - y1; अगर (Math.abs (dx) <= Math.abs (dy)) {// लंबवत स्क्रॉल v.getParent()। RequestDisallowInterceptTouchEvent (true); } अन्य {v.getParent()। RequestDisallowInterceptTouchEvent (false);} ब्रेक; –

+0

स्क्रॉल व्यू डब्ल्यू/वर्टिकल ओरिएंटेशन एक व्यू ग्रुप I द्वारा आयोजित एक और स्क्रॉल व्यू के भीतर घोंसला हुआ। –

8

आपकी सबसे अच्छी शर्त मोशनवेन्ट से निपटने के लिए होगी, जिसे आप View.OnTouchListener() कॉलबैक से प्राप्त करते हैं। मोशन इवेंट्स इस बात पर नजर रखता है कि आप वर्तमान में अपनी एक्शन प्रॉपर्टी द्वारा व्यू के साथ कैसे बातचीत कर रहे हैं।

मुझे लगता है कि आप मोशनवेन्ट्स की एक्शन प्रॉपर्टी की जांच करके और गति घटना के एक्स/वाई मानों की जांच करके अपनी दिशा को किस दिशा में स्लाइड कर सकते हैं, इसकी गणना कर सकते हैं।

switch (event.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
      oldX= event.getX(); 
      oldY= event.getY(); 
      break; 
     case MotionEvent.ACTION_MOVE: 
      int newX = motionEvent.getX(); 
      int newY = motionEvent.getY(); 

      int deltaX = oldX - newX; 
      int deltaY = oldY - newY; 

      if(Math.abs(deltaY)>Math.abs(deltaX)) 
       //Motion in Y direction. 
      else 
       // Motion in X direction. 
      break; 
     } 

रूप में अच्छी तरह उपयोग के लिए MotionEvent वस्तु पर उपलब्ध अन्य विधि के बहुत सारे हैं: http://developer.android.com/reference/android/view/MotionEvent.html

+0

नीचे की जांच 'होना चाहिए, अगर (Math.abs (deltaY)> Math.abs (deltaX))' – tibbi

+0

@tibbi तय है, धन्यवाद! –

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

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