1

我面临的问题是,在触发 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

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

4

1 回答 1

0

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

为了完整起见,由于您提到不确定您对指针 ID 的理解,我顺便提到指针索引不是持久的,只有 ID。因此,在使用检索有关指针的信息的 MotionEvent 方法之前,请确保您清楚这一点。

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

于 2015-02-19T18:05:42.080 回答