Android多点触控问题

时间:2011-06-23 16:50:29

标签: java android multi-touch

我确信这是一个相当简单的问题,但我似乎无法找到解决这个问题的方法。首先,这是我的代码:

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

        case MotionEvent.ACTION_DOWN:
            Log.w("Platformer", "primary down");
            break;

        case MotionEvent.ACTION_UP:
            Log.w("Platformer", "primary up");
            break;

        case MotionEvent.ACTION_POINTER_1_DOWN:
            Log.w("Platformer", "secondary down");
            break;

        case MotionEvent.ACTION_POINTER_1_UP:
            Log.w("Platformer", "secondary up");
            break;
        }

我想要它做的就是当我按下时,它会在日志中显示主指针或辅助指针是否已关闭,当我释放时,执行同样的操作。问题是,它始终适用于向下,但是,无论出现的第一个手指是什么,无论它是最初的主要指针还是辅助指针,它都会返回辅助指针被移除。有什么想法吗?我猜它很简单,但我不知道在哪里真实地看。提前谢谢。

WWaldo

2 个答案:

答案 0 :(得分:3)

ACTION_UP表示手势结束,即所有指针都已启动。

ACTION_POINTER_UP表示非主指针已启动,您必须检查事件以确定哪个,即:

int pointerIndex = (event.getAction() & MotionEvent.ACTION_POINTER_INDEX_MASK) >> 
     MotionEvent.ACTION_POINTER_INDEX_SHIFT;
int pointerId = event.getPointerId(pointerIndex)

现在不推荐使用ACTION_POINTER_1_UP和ACTION_POINTER_2_UP。

你应该注意到,Android版本的这个版本比Gingerbread要小。我发现如果我解除两次触摸中的第一次并将其放回,指针交换索引 ID。非常令人沮丧。

答案 1 :(得分:0)

使用getPointerId获取正在选择的指针。

修改

要回答评论中的问题,请尝试:

    for (int i = 0; i < ev.getPointerCount(); i++) {
        switch (ev.getAction() & MotionEvent.ACTION_MASK) {
        case MotionEvent.ACTION_DOWN:
        case MotionEvent.ACTION_POINTER_DOWN:
            Log.d(TAG,"down "+ ev.getPointerId(i));
            break;
        case MotionEvent.ACTION_MOVE:
            Log.d(TAG,"move "+ ev.getPointerId(i));
            break;
        case MotionEvent.ACTION_UP:
        case MotionEvent.ACTION_POINTER_UP:
            Log.d(TAG,"up "+ ev.getPointerId(i));
            break;  
        }
    }
相关问题