多点触控事件有问题

时间:2014-07-31 07:23:20

标签: java android event-handling touch multi-touch

我试图了解多点触控事件的工作原理,但我的代码并没有按照我的预期行事。只有当我随后快速将三个或更多手指放在屏幕上时,才能识别多个触摸:

@Override
public boolean onTouchEvent(MotionEvent event) {

    int x = (int) event.getX();
    int y = (int) event.getY();

    switch(event.getAction()){
    case MotionEvent.ACTION_DOWN:
        doSomeUnimportantStuff();
        return true;

    case MotionEvent.ACTION_POINTER_DOWN:
        for (int i = 0;i < event.getPointerCount()-1;i++) {
            Log.d("Multi-Touch", Float.toString(event.getX(i)));
            return true;
        }
    }
    return true;
}

为什么我在屏幕上放置的第二根手指没有被识别,为什么我将手指放在屏幕上的速度会影响是否识别出多个触摸?

1 个答案:

答案 0 :(得分:2)

根据android文档:

  

你应该总是使用方法getActionMasked(event)(或者更好的是,兼容性版本MotionEventCompat.getActionMasked(event)来检索MotionEvent的动作

至于知道您是否有单个或多个触摸事件,请使用以下代码片段,再次从Android文档中获取。你基本上检查是否有多个指针,如果有,那么显然屏幕上有多个触摸。

if (event.getPointerCount() > 1) {
    //MULTI TOUCH EVENT IS TRIGGERED!
    // The coordinates of the current screen contact, relative to 
    // the responding View or Activity.  
    xPos = (int)MotionEventCompat.getX(event, index);
    yPos = (int)MotionEventCompat.getY(event, index);

} else {
    // Single touch event

    xPos = (int)MotionEventCompat.getX(event, index);
    yPos = (int)MotionEventCompat.getY(event, index);
}