在我的用例中有2个图标(在GL场景中),我希望平行和独立地处理他们的按下,保持和释放状态(用两根手指)。
为此,我尝试了很多代码变体。目前这是表现最好但仍然不好的代码:
@Override
public boolean onTouch(View v, MotionEvent e) {
if (v != this) return false;
boolean down = false;
switch (e.getActionMasked()) {
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_MOVE:
case MotionEvent.ACTION_POINTER_DOWN:
down = true;
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_POINTER_UP:
case MotionEvent.ACTION_OUTSIDE:
case MotionEvent.ACTION_CANCEL:
down = false;
break;
}
boolean handled = e.getPointerCount() > 0;
for(int i = 0; i < e.getPointerCount(); i++) {
e.getPointerCoords(i, coords);
int pointer = e.getPointerId(i);
if (down) {
scene.sizes.pixelToCm(vec, coords.x, coords.y);
touchMap.set(pointer, vec.getX(), vec.getY());
} else {
touchMap.clear(pointer);
}
}
return true;
}
在这种情况下,当我按住图标A时,它是好的。比我仍然按住图标A并按下图标B,它也是好的,两个图标都被按下了。但是当我发布图标B时,图标A也会暂时释放。
我猜onTouch()事件处理程序获取UP事件,但其指针列表(e.getPointerCount(),e.getPointerCoords())也包含DOWN指针。
任何人都可以帮我解决这个问题吗?
答案 0 :(得分:0)
这段代码似乎符合我的期望:
@Override
public boolean onTouch(View v, MotionEvent e) {
if (v != this) return false;
for(int i = 0; i < 8; i++)
touchMap.clear(i);
if (e.getActionMasked() == MotionEvent.ACTION_UP) {
return true;
}
for(int i = 0; i < e.getPointerCount(); i++) {
e.getPointerCoords(i, coords);
int pointer = e.getPointerId(i);
scene.sizes.pixelToCm(vec, coords.x, coords.y);
touchMap.set(pointer, vec.getX(), vec.getY());
}
return true;
}