2012-01-27 11 views
19

निम्नलिखित कोड मैं मल्टीटाउच के लिए उपयोग करने का प्रयास कर रहा हूं। फिंगर एक सही ढंग से सेट होता है और जब मैं अपनी उंगली खींचता हूं तो चारों ओर घूमता है। फिंगर दो दिखाता है और गायब हो जाता है जब मैं अपनी अंगुली को छूता हूं और छोड़ देता हूं, लेकिन यह कभी नहीं चलता है। कोई विचार क्या गलत है?एंड्रॉइड मल्टीटाउच - दूसरा फिंगर ACTION.MOVE अनदेखा

मैंने developers blog पढ़ा है, मुझे अभी भी समझ में नहीं आता कि समस्याएं क्या हैं।

@Override 
    public boolean onTouchEvent(MotionEvent event) { 
     int action = event.getAction() & MotionEvent.ACTION_MASK; 
     int pointerIndex = (event.getAction() & MotionEvent.ACTION_POINTER_ID_MASK) >> MotionEvent.ACTION_POINTER_ID_SHIFT; 
     int pointerId = event.getPointerId(pointerIndex); 
     switch (action) { 
     case MotionEvent.ACTION_DOWN: 
     case MotionEvent.ACTION_POINTER_DOWN: 
      if (pointerId == 0) 
      { 
       fingerOneDown = 1; 
       fingerOneX = event.getX(pointerIndex); 
       fingerOneY = event.getY(pointerIndex); 
      } 
      if (pointerId == 1) 
      { 
       fingerTwoDown = 1; 
       fingerTwoX = event.getX(pointerIndex); 
       fingerTwoY = event.getY(pointerIndex); 
      } 
      break; 

     case MotionEvent.ACTION_UP:   
     case MotionEvent.ACTION_POINTER_UP: 
     case MotionEvent.ACTION_CANCEL: 
      if (pointerId == 0) 
      { 
       fingerOneDown = 0; 
       fingerOneX = event.getX(pointerIndex); 
       fingerOneY = event.getY(pointerIndex); 
      } 
      if (pointerId == 1) 
      { 
       fingerTwoDown = 0; 
       fingerTwoX = event.getX(pointerIndex); 
       fingerTwoY = event.getY(pointerIndex); 
      } 
      break; 

     case MotionEvent.ACTION_MOVE: 
      if (pointerId == 0) 
      { 
       fingerOneDown = 1; 
       fingerOneX = event.getX(pointerIndex); 
       fingerOneY = event.getY(pointerIndex); 
      } 
      if (pointerId == 1) 
      { 
       fingerTwoDown = 1; 
       fingerTwoX = event.getX(pointerIndex); 
       fingerTwoY = event.getY(pointerIndex); 
      } 

      break; 
     } 
     return true; 
    } 

उत्तर

31

इसे कभी न मानें। मैंने ठीक कर दिया। ACTION.MOVE ईवेंट हमेशा कुछ अजीब कारण के लिए पॉइंटर आईडी के रूप में शून्य हो जाता है। इस वजह से, आपको हमेशा नीचे दिए गए घटना के भीतर पॉइंटर आईडी को पुन: गणना करना होगा:

 case MotionEvent.ACTION_MOVE: 

     int pointerCount = event.getPointerCount(); 
     for(int i = 0; i < pointerCount; ++i) 
     { 
      pointerIndex = i; 
      pointerId = event.getPointerId(pointerIndex); 
      Log.d("pointer id - move",Integer.toString(pointerId)); 
      if(pointerId == 0) 
      { 
       fingerOneDown = 1; 
       fingerOneX = event.getX(pointerIndex); 
       fingerOneY = event.getY(pointerIndex); 
      } 
      if(pointerId == 1) 
      { 
       fingerTwoDown = 1; 
       fingerTwoX = event.getX(pointerIndex); 
       fingerTwoY = event.getY(pointerIndex); 
      } 
     } 
     break; 
+0

क्या यह एक बग है? मेरे पास एक ही अजीब व्यवहार है। मैंने Google में खोज की और कुछ अन्य लोगों के पास यह भी है। –

+0

मुझे नहीं पता कि यह एक बग है, लेकिन यह एक दस्तावेजी चिंता है और पॉइंटर आईडी के माध्यम से इसे फिर से हल करता है। अगर कुछ भी हो, तो यह सिर्फ एक अजीब डिजाइन निर्णय हो सकता है। –

+0

धन्यवाद, यह बहुत उपयोगी था !!! – Jbecwar

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