gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 13:48:05 28 4
gpt4 key购买 nike

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

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

在显示我的指针 X 位置的日志中,您可以看到当我向屏幕添加额外触摸(指针编号 1)时,X 坐标与第一次触摸(指针编号 0)相同。 ..

11-25 12:34:02.911: D/CV(25231): Point number 0 is down at X value 260.60608
11-25 12:34:05.281: D/CV(25231): Point number 0 is down at X value 477.57578
11-25 12:34:06.261: D/CV(25231): Point number 0 is down at X value 581.8182
11-25 12:34:11.891: D/CV(25231): Point number 0 is down at X value 267.87878
11-25 12:34:13.321: D/CV(25231): Point number 1 is down at X value 267.87878

这让我很沮丧,因为我几乎从在线教程中复制并粘贴了整个内容,但我不明白为什么它不能正常工作!另外,正如您可以想象的那样,ACTION_MOVE 也无法正常工作...

非常感谢任何帮助,谢谢

最佳答案

这是因为 event.getX() 返回 first 指针索引的值。

您应该使用 getX(int pointerIndex)如下:

Log.d("CV", "Point number " +id+ " is down at X value " +event.getX(getIndex(event)));

关于java - onTouchEvent 为多个指针返回相同的坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20193437/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com