Вы вызываете метод, который выполняет некоторые математические операции на основе сохраненных значений местоположения и пальца, который все еще находится на экране. Математика должна быть довольно простой, но я не знаю, что ты на самом деле хочешь делать.
му я разрабатываю приложение, которое должно обрабатывать мультитач. В принципе, я хочу одно касание для поворота (это не проблема). И мультитач для прокрутки.
У меня есть основной код, но у меня возникают проблемы, когда происходит переход от одиночного к мультитач и наоборот. В основном движение будет толчковым, потому что среднее положение мультитача (два пальца) и абсолютное положение одного пальца находятся на расстоянии. Поэтому, если у меня два пальца на экране, они занимают срединное положение, а затем поднимают один палец, это будет похоже на быстрое перемещение из этого срединного положения в абсолютное положение одного пальца. Это будет движение, которое я не хочу.
Это мой код:
@Override
public boolean onTouchEvent( MotionEvent event ) {
float xEvent[] = new float[ 2 ];
float yEvent[] = new float[ 2 ];
switch( event.getPointerCount() ) {
case 1:
xEvent[ 0 ] = event.getX( 0 );
yEvent[ 0 ] = event.getY( 0 );
switch( event.getAction() ) {
case MotionEvent.ACTION_DOWN:
camera.onTouchDown( xEvent[ 0 ], yEvent[ 0 ] );
return true;
case MotionEvent.ACTION_MOVE:
camera.onTouchRotate( xEvent[ 0 ], yEvent[ 0 ] );
return true;
default: return super.onTouchEvent( event );
}
case 2:
xEvent[ 0 ] = event.getX( 0 );
yEvent[ 0 ] = event.getY( 0 );
xEvent[ 1 ] = event.getX( 1 );
yEvent[ 1 ] = event.getY( 1 );
switch( event.getAction() ) {
case MotionEvent.ACTION_DOWN:
camera.onTouchDown( ( ( xEvent[ 0 ] + xEvent[ 1 ] ) / 2 ), ( ( yEvent[ 0 ] + yEvent[ 1 ] ) / 2 ) );
return true;
case MotionEvent.ACTION_MOVE:
camera.onTouchSlide( ( ( xEvent[ 0 ] + xEvent[ 1 ] ) / 2 ), ( ( yEvent[ 0 ] + yEvent[ 1 ] ) / 2 ) );
return true;
case MotionEvent.ACTION_POINTER_1_UP:
camera.onTouchDown( xEvent[ 1 ], yEvent[ 1 ] );
return true;
case MotionEvent.ACTION_POINTER_2_UP:
camera.onTouchDown( xEvent[ 0 ], yEvent[ 0 ] );
return true;
default: return super.onTouchEvent( event );
}
default: return false;
}
}
Функция onTouchDown камеры просто устанавливает первое значение касания. Вот почему я также использую его в движении вверх, чтобы установить новое начальное значение для движения одним касанием, когда оно идет от мультитача.
Я надеюсь, что кто-то знает, в чем моя проблема, и может помочь мне в дальнейшем.