Так что я разрабатываю приложение, которое должно обрабатывать мультитач. В принципе, я хочу одно касание для вращения (это не проблема). И мультитач для прокрутки.Как закодировать для multitouch
У меня есть базовый код, но у меня возникают проблемы при переходе от одного к мультитач и вице-верки. В основном движение будет толчком, потому что медианное положение мультитач (два пальца) и абсолютное положение одного пальца находятся на расстоянии. Поэтому, если у меня есть два пальца на экране, они составляют медианное положение, а затем поднимают один палец, это будет похоже на быстрое перемещение из этого медианного положения в абсолютное положение одного пальца. Это будет движение, которого я не хочу.
Это мой код:
@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 камеры просто устанавливает первое значение сенсорного движения. Вот почему я также использую его в движении вверх, чтобы установить новое значение начала для движения с одним касанием при выходе из мультитач.
Я надеюсь, что кто-то знает, в чем моя проблема, и может помочь мне дальше.
Thanx! Я только что закончил одну реализацию, которая работает на 80%. Но после прочтения этой ссылки я думаю, что я могу лучше использовать маски и идентификаторы. – Espen