Я пытаюсь исправить проблему, которая появляется в моем коде, когда я добавил функции мультитач в моем приложении. Проблема, кажется, исходит из ACTION_POINTER_DOWN:Multitouch - PointerIndex вне диапазона
private float oldDist = 0;
backCard.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent me) {
switch(me.getAction()){
case MotionEvent.ACTION_DOWN:
firstX = (int) me.getX();
case MotionEvent.ACTION_POINTER_DOWN:
if(me.getPointerCount() >= 2){
oldDist = getSpacing(me);
System.out.println(oldDist);
}
break;
case MotionEvent.ACTION_MOVE:
float newDist = getSpacing(me);
if(newDist - oldDist > 200 && oldDist != 0){
System.out.println("Enabled");
}
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_POINTER_UP:
break;
}
return true;
}
private float getSpacing(MotionEvent me){
float difx = me.getX(0) - me.getX(1);
float dify = me.getY(0) - me.getY(1);
float spacing = (float) Math.sqrt(difx*difx + dify*dify);
return spacing;
}
});
Когда я использую его без условия getPointerCount() в ACTION_POINTER_DOWN, у меня есть об отсутствии ошибок диапазона. Но если я использую это условие, журнал не отображает ничего, что я напечатаю в коде. (Конечно, я использую 2 пальца! :)), поэтому условие никогда не будет истинным, даже если несколько пальцев коснутся экрана одновременно.
Как это исправить? Спасибо.
Мое устройство GS3.
Я не думаю, что ACTION_DOWN поставляется один раз для всех пальцев. Маловероятно, что вы получите оба пальца точно в тот же момент, в миллисекундах друг от друга. Я предлагаю вам сосредоточиться на ACTION_MOVE. – 323go