我确信这是一个相当简单的问题,但我似乎无法找到解决这个问题的方法。首先,这是我的代码:
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
答案 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;
}
}