Multitouch para Android – Segundo dedo ACTION.MOVE Ignorado

El código siguiente es lo que he estado intentando utilizar para multitouch. El dedo uno está ajustado correctamente y se mueve cuando arrastro mi dedo. El dedo dos aparece y desaparece cuando toco y suelto mi dedo, pero nunca se mueve. Alguna idea de lo que está mal?

He leído el blog de desarrolladores todavía no entiendo cuáles son los problemas.

@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; } 

No importa esto. Lo arreglé. El evento ACTION.MOVE obtiene siempre cero como el pointerId por alguna extraña razón. Debido a esto, siempre tiene que recalcular el pointerId dentro del evento como se ve a continuación:

  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; 
  • Split Motion Events en android 2.3 y posterior
  • multitouch androide, el puntero de acción no funciona correctamente
  • Custom textview con rotar, acercar, alejar y mover en el tacto en android?
  • MotionEvent.getPointerCount () siempre es 1
  • ¿Cuál es el significado de un índice de puntero y de qué maneras puede ser cambiado?
  • Multitouch para Android obteniendo punteros erróneos y / o valores XY
  • ¿Cómo implementar un doble clic con dos dedos en Android?
  • Android Libraries para la implementación de Multi Touch fácil que incluye Twist / Rotate etc?
  • Testcase con multitouch en Android?
  • La diferencia de utilizar el método MotionEvent.getAction ()
  • Multitouch para Android: ACTION_UP no siempre se llama?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.