获取最近剩余手指的坐标 - Android Multitouch

时间:2015-02-18 14:06:12

标签: android pointers multi-touch touchscreen ontouch

我遇到的问题是,在触发ACTION_POINTER_UP时,我需要抓住最近剩余手指的坐标。

以此为例(使用2个指针):

  • 将拇指放在屏幕上(ID0)
  • 将食指放在屏幕上(ID1)
  • 从屏幕抬起拇指(ID0)
  • 剩余指针是食指(ID1)
  • 食指(ID1)的抓取坐标

现在,在我的ACTION_POINTER_UP案例中,我有以下内容:

case MotionEvent.ACTION_POINTER_UP: {

    y = event.getY();
    x = event.getX();                                   
    break;                                          
 }

显然,这没什么用,因为(据我所知),这会记录离开屏幕的指针的x和y,不是我需要的东西

上面的示例仅使用了2个指针,但同样的问题可以应用于3,4或5个指针。

  • 将拇指放在屏幕上(ID0)
  • 将食指放在屏幕上(ID1)
  • 将中指放在屏幕上(ID2)
  • 将无名指放在屏幕上(ID3)
  • 从屏幕抬起拇指(ID0)
  • 抓住最近剩下的指针x和y触及了sceeen

请不要链接到任何官方的Android文档或博客,我已多次阅读它们,但我仍然不明白我是如何实现这一目标的。另外,如果我对指针ID的理解不正确,请纠正我。

1 个答案:

答案 0 :(得分:0)

由于MotionEvent的getDownTime()方法仅适用于初始指针,并且在所有指针都上升之前保持不变,因此您必须维护自己的数据结构,将指针ID映射到您的时间得到该指针的ACTION_DOWN或ACTION_POINTER_DOWN。对于这些ACTION_DOWN或ACTION_POINTER_DOWN事件的时间,请使用getEventTime()。

为了完整性,既然你提到不确定你对指针ID的理解,我顺便提一下,指针索引不是持久的,只有ID。因此,在使用检索有关指针的信息的MotionEvent方法之前,请确保您已明确这一点。

event.getX()也返回指针索引零的值,相当于event.getX(0)。