Pessoal tenho aqui uma classe para gerar multi toque, sp que percebi aqui no android 4.X que acima de dois dedos simultâneos as vezes da uma falha no toque, esta classe uso para um aplicativo de bateria instrumental, e tneho que ao tocar com os dedos na tela tocar o som das batidas, mais quando esta com mais de dois dedois as vezes toca e as vezes não, sei que no android 2.X não funciona, mais no 4.X teria que funcionar,.
A classe é esta
import android.view.MotionEvent;
import android.view.View;
public class TouchActions {
private View[] ultimaViewPointer = new View[4];
public boolean isOver(View view, View parent, MotionEvent event) {
boolean result = false;
try {
int action = event.getAction();
int ptrId = event.getPointerId(0);
if (event.getPointerCount() > 1)
ptrId = (action & MotionEvent.ACTION_POINTER_ID_MASK) >>> MotionEvent.ACTION_POINTER_ID_SHIFT;
switch (event.getAction()) {
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_POINTER_1_UP:
case MotionEvent.ACTION_POINTER_2_UP:
case MotionEvent.ACTION_POINTER_3_UP:
ultimaViewPointer[ptrId] = null;
return false;
}
int[] locV = new int[2];
view.getLocationInWindow(locV);
int xL = locV[0];
int xR = xL + view.getWidth();
int yT = locV[1];
int yB = yT + view.getHeight();
int[] locP = new int[2];
parent.getLocationOnScreen(locP);
float x = event.getX(event.findPointerIndex(ptrId)) + locP[0];
float y = event.getY(event.findPointerIndex(ptrId)) + locP[1];
boolean isPointerOver = (xL <= x) && (xR >= x) && (yT <= y)
&& (yB >= y);
if (isPointerOver) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_POINTER_1_DOWN:
case MotionEvent.ACTION_POINTER_2_DOWN:
case MotionEvent.ACTION_POINTER_3_DOWN:
result = true;
ultimaViewPointer[ptrId] = view;
break;
case MotionEvent.ACTION_MOVE:
if (ultimaViewPointer[ptrId] != view) {
result = true;
ultimaViewPointer[ptrId] = view;
}
}
}
} catch (Exception e) {
}
return result;
}
}
Se alguém puder me ajudar, eu agradeço.