我正在开发一个多点触控程序,该程序只需要记录第二根手指或食指的动作。现在文档说我们可以使用 MotionEvent.ACTION_POINTER_INDEX_MASK 和 & 它与 action 和 shift by INDEX_SHIFT 来获取使动作像上升或下降的指针。但是这种技术在移动时不起作用。
无论如何,我们可以单独检测某个指针所做的移动动作吗?
谢谢,
我正在开发一个多点触控程序,该程序只需要记录第二根手指或食指的动作。现在文档说我们可以使用 MotionEvent.ACTION_POINTER_INDEX_MASK 和 & 它与 action 和 shift by INDEX_SHIFT 来获取使动作像上升或下降的指针。但是这种技术在移动时不起作用。
无论如何,我们可以单独检测某个指针所做的移动动作吗?
谢谢,
是的,你的View
课堂上可以有这样的东西:
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getActionMasked()) {
case MotionEvent.ACTION_MOVE:
if(event.getPointerCount()>1){
//where 1 is the index of the second finger
final int Y = event.getY(1);
final int X = event.getX(1);
}
break;
}
}
因此,根据您想要获取移动的手指,您可以将获取设置为该索引。请记住,值可能是从 0(第一个向下的指针)到getPointerCount()-1
. 我在 2.2 Gingerbread 上对此进行了测试,希望对您有用:)
您可以通过检查哪个指针更改来获得有效的指针索引:
private final int MAX_POINTER = 5; // 5 different touch pointers supported on most devices
private float mLastTouchPositionX[];
private float mLastTouchPositionY[];
@Override
public boolean onTouchEvent(MotionEvent aEvent)
int tActionIndex = aEvent.getActionIndex();
int tPointerCount = aEvent.getPointerCount();
/*
* Check which pointer changed on move
*/
if (tMaskedAction == MotionEvent.ACTION_MOVE) {
for (int i = 0; i < tPointerCount && i < MAX_POINTER; i++) {
if (mLastTouchPositionX[i] != aEvent.getX(i) || mLastTouchPositionY[i] != aEvent.getY(i)) {
mLastTouchPositionX[i] = aEvent.getX(i);
mLastTouchPositionY[i] = aEvent.getY(i);
// Found new action index
tActionIndex = i;
break;
}
}
}
...
}