如何编码多点触控

Esp*_*pen 8 android multi-touch touch

所以我正在开发一个必须处理多点触控的应用程序.基本上我想要单点旋转(这没问题).用于滚动的多点触控.

我有基本的代码,但是当从单一触摸转换到多点触控和副verca时,我遇到了问题.基本上,由于多点触控(两个手指)的中间位置和单个手指的绝对位置处于一定距离,因此运动将摇晃.因此,如果我在屏幕上有两个手指,它们构成一个中间位置,然后抬起一根手指,这就像从中间位置到绝对单指位置的快速移动.这将是我不想要的运动.

这是我的代码:

@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;
    }
}
Run Code Online (Sandbox Code Playgroud)

相机的onTouchDown功能只设置触摸移动的第一个值.这就是为什么我还在向上运动中使用它来为来自多点触控的单点触控动作设置新的开始值.

我希望有人知道我的问题是什么,可以帮助我.

ada*_*amp 10

如果您还没有阅读它,请从这里开始,它涉及Android中多点触控的一些事项:http://android-developers.blogspot.com/2010/06/making-sense-of-multitouch.html

关于您发布的代码的一些事项:

  1. 你永远不会看到ACTION_DOWN指针计数为2. ACTION_DOWN只发送给第一个指针下降.第一个触摸屏幕后的所有手指都会发送ACTION_POINTER_DOWN.
  2. 不要假设最多只有2个手指触摸,很容易就会有更多.
  3. 使用屏蔽操作(使用MotionEvent#getActionMasked())比单独编写每个指针索引要容易得多.
  4. 最后,指数只对将数据拉出来而言很重要MotionEvent.如果您跟踪指针随时间的移动,请使用指针ID.
  5. 指针ID只是数字.不要假设它们将具有什么值,而不是它们将从0开始整数.