gpt4 book ai didi

android - 如何为多点触控编码

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:01:46 29 4
gpt4 key购买 nike

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

我有基本的代码,但是当从单点触摸到多点触摸,反之亦然,我遇到了问题。基本上运动会颠簸,因为多点触控(两根手指)的中间位置和单指的绝对位置有一段距离。因此,如果我在屏幕上有两根手指,它们位于中间位置,然后抬起一根手指,就像从中间位置快速移动到绝对单指位置一样。这将是我不想要的运动。

这是我的代码:

@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函数只是设置触摸移动的第一个值。这就是为什么我还在向上移动中使用它来为来自多点触控的单点触摸移动设置新的开始值。

我希望有人知道我的问题是什么,可以进一步帮助我。

最佳答案

如果您还没有阅读它,请从这里开始,它涵盖了 Android 中处理多点触控的许多内容:http://android-developers.blogspot.com/2010/06/making-sense-of-multitouch.html

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

  1. 您永远不会看到指针计数为 2 的 ACTION_DOWNACTION_DOWN 仅针对第一个下降的指针发送。所有在第一个手指之后触摸屏幕的手指都会发送 ACTION_POINTER_DOWN
  2. 不要假设最多只有 2 个手指触摸,很容易会有更多。
  3. 使用屏蔽 Action (使用 MotionEvent#getActionMasked())比为每个指针索引单独编码要容易得多。
  4. 最后,索引只对从 MotionEvent 中提取数据有影响。如果您要跟踪指针随时间的移动,请使用指针 ID。
  5. 指针 ID 只是数字。不要假设它们将具有什么值,除了它们将是 0 及以上的整数。

关于android - 如何为多点触控编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4229219/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com