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.
- ¿Se admite multi-touch / gestos en todos los navegadores de teléfonos inteligentes (Android e iOS)?
- Grifos multi-touch de dos dedos
- Multitouch de Android en dispositivos compatibles
- Cómo codificar para multitouch
- Android: Multi toque y TYPE_SYSTEM_OVERLAY
@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; }
- Android - Cómo manejar el toque de dos dedos
- Manejo multitouch en libgdx
- Android Webview multitouch touchstart evento no funciona con más de 2 dedos
- Android Multitouch - Determina qué dedo levantado?
- Cómo detectar el gesto de desplazamiento de la vista web con el zoom multitáctil habilitado con una aleta
- Consulta el número exacto de punteros compatibles con multitouch
- ¿Los dispositivos Android / webOS admiten eventos multi-touch de Javascript?
- Interferencia multitáctil para Android
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;
- Android cómo arreglar la orientación de la cámara
- ¿Es posible aplicar la clave principal en los campos de texto en la base de datos android