【问题标题】:Android multitouch getting wrong pointers and/or XY valuesAndroid 多点触控获得错误的指针和/或 XY 值
【发布时间】:2011-07-05 20:48:55
【问题描述】:

我在从多点触控事件中获取 X 和 Y 值时遇到问题。下面是显示当 POINTER_DOWN 和 POINTER_UP 事件被触发时我如何获取值的代码,但是 X 和 Y 值似乎在 POINTER_UP 事件上混淆/重复。

@Override
public void onTouchEvent(MotionEvent event) {

int id, pointerIndex;

switch (event.getAction() & MotionEvent.ACTION_MASK) {

  case MotionEvent.ACTION_POINTER_DOWN:

    pointerIndex = (event.getAction() & MotionEvent.ACTION_POINTER_ID_MASK) 
    >> MotionEvent.ACTION_POINTER_ID_SHIFT;
    id = event.getPointerId(pointerIndex);

    Log.e("Down", ""+id+" "+event.getX(id)+" "+event.getY(id));

    break;

case MotionEvent.ACTION_POINTER_UP:

    pointerIndex = (event.getAction() & MotionEvent.ACTION_POINTER_ID_MASK) 
    >> MotionEvent.ACTION_POINTER_ID_SHIFT;
    id = event.getPointerId(pointerIndex);

    Log.e("UP", ""+id+" "+event.getX(id)+" "+event.getY(id));

    break;
}

super.onTouchEvent(event);

}

这通常会导致以下 lolcat:

E/DOWN    (25070): 0 279.60922 279.17447
E/DOWN    (25070): 1 513.20044 520.3252
E/DOWN    (25070): 2 422.6651 358.72418

E/UP      (25070): 0 279.60922 279.17447
E/UP      (25070): 1 422.6651 358.72418 
E/UP      (25070): 2 422.6651 358.72418 

在这里您可以看到 id 1 的 XY 位置是错误的,而是显示值 id 2。

请注意,不会调用任何 ACTION_CANCEL 事件。我想我使用 MASKS/ANDing 有问题。任何帮助将不胜感激!

【问题讨论】:

  • 该问题是由于 3.1 中的更改对使用无效指针索引调用 getX 和 getY 更加严格。我使用的是pointerId而不是pointerIndex,因此它崩溃了(这要归功于下面的答案)。

标签: android multi-touch touch-event


【解决方案1】:

显然 event.getX 和 event.getY 应该输入指针 index,而不是指针 id。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-25
    • 1970-01-01
    • 1970-01-01
    • 2011-09-06
    • 2018-05-04
    • 2015-10-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多