我正在开发一个需要处理多点触控的应用程序。基本上,我想要单点触控来实现旋转(这没有问题),而使用多点触控来进行滚动。
我已经编写了基本代码,但是在单点触控和多点触控之间切换时出现了问题。基本上,由于多点触控(两个手指)的中位位置和单个手指的绝对位置之间有一定距离,因此移动会出现抖动。例如,如果我在屏幕上放置了两个手指,它们组成一个中位位置,然后将其中一个手指抬起,就会像从那个中位位置快速移动到单个手指的绝对位置一样。这是我不希望出现的移动。
以下是我的代码:
@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函数只是设置了触摸移动的第一个值。因此,当从多点触控返回时,我还将其用于上升运动,以设置单点触控运动的新起始值。
希望有人知道我的问题并能够帮助我进一步解决。