【问题标题】:Android onTouch multi-touch not receiving all touch eventsAndroid onTouch 多点触控未接收到所有触控事件
【发布时间】:2014-08-18 07:33:13
【问题描述】:

我正在使用 Android SurfaceView 并监听多点触控事件。我能够检测到多次触摸,但似乎ACTION_POINTER_UP 触摸事件没有被触发。这是我的代码的快速片段。

public class GameView extends SurfaceView implements Runnable {
    ...
    @Override
    public boolean onTouchEvent(MotionEvent motionEvent) {
        Log.i("pointer count", Integer.toString(motionEvent.getPointerCount()));
        return true;
    }
    ...
}

当我将两根手指放在屏幕上时,指针计数注销为 2。如果我移开一根手指,指针计数注销不是 1,而是保持在 2。如果我移动手指,它只会变为 1还在屏幕上。为什么会这样,我该如何解决?谢谢!

编辑

这个问题出现在我的一加一和我的朋友三星 Galaxy Note 2 上。有趣的是,当我把它放在我的三星 Galaxy s4 上时,并没有出现这个问题。

【问题讨论】:

  • 只有在非主指针上升时才会发生这种情况。
  • @SimonMarquis 如果这是一个问题。是的!
  • 不,不是。但是如果你正确地接收到 MOVE 事件,你肯定做错了什么。一点点代码可能有助于发现错误
  • 在您的日志语句中添加正在发生的操作,也许这会对您有所帮助 (actionToString(action))。 getActionIndex 还会告诉您该操作针对哪个指针。 developer.android.com/reference/android/view/MotionEvent.html
  • 谢谢@Arve 我已经这样做了,它会注销ACTION_POINTER_UP(1),尽管如果我在使用action == MotionEvent.ACTION_POINTER_UP 之后进行日志记录,它会返回false。为什么?

标签: android surfaceview multi-touch


【解决方案1】:

不要使用getAction() == MotionEvent.ACTION_POINTER_UP,因为动作也会包含指针索引。

getActionMasked() 会去掉这些信息,可以用来比较。

http://developer.android.com/reference/android/view/MotionEvent.html#getActionMasked()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-16
    • 1970-01-01
    • 1970-01-01
    • 2014-02-13
    • 1970-01-01
    • 2011-12-21
    • 1970-01-01
    相关资源
    最近更新 更多