Java onTouchEvent为多个指针返回相同的坐标
我目前正在开发我的第一个多点触控android应用程序,在使用onTouchEvent()时遇到了一些困难。我使用了一个在线教程中的一些代码,它似乎为我提供了屏幕上每次触摸的正确指针ID信息,但动作指针向下事件的事件坐标似乎总是与初始触摸的坐标相同。我的代码如下:Java onTouchEvent为多个指针返回相同的坐标,java,android,multi-touch,touch-event,Java,Android,Multi Touch,Touch Event,我目前正在开发我的第一个多点触控android应用程序,在使用onTouchEvent()时遇到了一些困难。我使用了一个在线教程中的一些代码,它似乎为我提供了屏幕上每次触摸的正确指针ID信息,但动作指针向下事件的事件坐标似乎总是与初始触摸的坐标相同。我的代码如下: private int getIndex(MotionEvent event) { int idx = (event.getAction() & MotionEvent.ACTION_POINTER_IND
private int getIndex(MotionEvent event) {
int idx = (event.getAction() & MotionEvent.ACTION_POINTER_INDEX_MASK) >> MotionEvent.ACTION_POINTER_INDEX_SHIFT;
return idx;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
int action = event.getAction() & MotionEvent.ACTION_MASK;
switch(action) {
case MotionEvent.ACTION_DOWN : {
int id = event.getPointerId(0);
Log.d("CV", "Point number " +id+ " is down at X value " +event.getX());
callbackListener.onTouchDown(event, id);
break;
}
case MotionEvent.ACTION_MOVE : {
int touchCounter = event.getPointerCount();
for (int t = 0; t < touchCounter; t++) {
int id = event.getPointerId(t);
callbackListener.onMove(event, id);
}
break;
}
case MotionEvent.ACTION_POINTER_DOWN : {
int id = event.getPointerId(getIndex(event));
Log.d("CV", "Point number " +id+ " is down at X value " +event.getX());
callbackListener.onTouchDown(event, id);
break;
}
case MotionEvent.ACTION_POINTER_UP : {
int id = event.getPointerId(getIndex(event));
//Log.d("CV", "Other point up ["+id+"]");
callbackListener.onTouchUp(event, id);
break;
}
case MotionEvent.ACTION_UP : {
int id = event.getPointerId(0);
//Log.d("CV", "Pointer up ["+id+"]");
callbackListener.onTouchUp(event, id);
break;
}
}
return true;
}
这让我很沮丧,因为我几乎复制并粘贴了在线教程中的全部内容,我不明白为什么它不能正常工作!而且,正如你所能想象的,这个动作也不能正常工作
非常感谢您提供的任何帮助这是因为
event.getX()
返回第一个
指针索引的值
您应该使用,如下所示:
Log.d("CV", "Point number " +id+ " is down at X value " +event.getX(getIndex(event)));
非常感谢,这起作用了!你能告诉我为什么当我移动我的第二个手指时,我的动作记录显示0号和1号指针都在移动吗?
Log.d("CV", "Point number " +id+ " is down at X value " +event.getX(getIndex(event)));