Java onTouchEvent为多个指针返回相同的坐标

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

我目前正在开发我的第一个多点触控android应用程序,在使用onTouchEvent()时遇到了一些困难。我使用了一个在线教程中的一些代码,它似乎为我提供了屏幕上每次触摸的正确指针ID信息,但动作指针向下事件的事件坐标似乎总是与初始触摸的坐标相同。我的代码如下:

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)));