Java Android多点触控仅适用于一根手指
我正在开发一款双人乒乓球游戏,希望能用一个手指控制蝙蝠。然而,我的问题是,它一次只响应屏幕上的一个手指。整个游戏在一个视图中运行。首先,在移动相应的蝙蝠之前,我先检查指针是否处于“活动”状态,然后再检查它是否出现在屏幕的顶部或底部。它工作正常,除了只有一个触摸寄存器。我的方法代码如下:Java Android多点触控仅适用于一根手指,java,android,multi-touch,Java,Android,Multi Touch,我正在开发一款双人乒乓球游戏,希望能用一个手指控制蝙蝠。然而,我的问题是,它一次只响应屏幕上的一个手指。整个游戏在一个视图中运行。首先,在移动相应的蝙蝠之前,我先检查指针是否处于“活动”状态,然后再检查它是否出现在屏幕的顶部或底部。它工作正常,除了只有一个触摸寄存器。我的方法代码如下: // variables int _touchY = (int) event.getY(); boolean isTopSide = true; // test if motio
// variables
int _touchY = (int) event.getY();
boolean isTopSide = true;
// test if motionEvent was on the top or bottom of the screen
if (SCREEN_HEIGHT / 2 - _touchY < 0) {
isTopSide = false;
}
switch (event.getActionMasked()) {
case MotionEvent.ACTION_DOWN:
_activePointer = event.getPointerId(0);
break;
case MotionEvent.ACTION_MOVE:
if(_activePointer != INVALID_POINTER_ID) {
if (isTopSide) { // top bat
_topBat.moveBat(event);
} else { // bottom bat
_botBat.moveBat(event);
}
}
if(_newPointer != INVALID_POINTER_ID){
if (isTopSide) { // top bat
_topBat.moveBat(event);
} else { // bottom bat
_botBat.moveBat(event);
}
}
break;
case MotionEvent.ACTION_UP:
if(_activePointer != INVALID_POINTER_ID){
_activePointer = INVALID_POINTER_ID;
}
break;
case MotionEvent.ACTION_CANCEL:
_activePointer = INVALID_POINTER_ID;
break;
case MotionEvent.ACTION_POINTER_UP:
int pointerIndex = event.getActionIndex();
int pointerId = event.getPointerId(pointerIndex);
if(pointerId == _activePointer){
_activePointer = INVALID_POINTER_ID;
}
case MotionEvent.ACTION_POINTER_DOWN:
int newPointerIndex = event.getActionIndex();
_newPointer = event.getPointerId(newPointerIndex);
break;
}
之所以只看到单个指针的值,主要是因为没有任何参数的
event.getY()
为您提供了第一个指针索引的位置,即使实际移动的指针是第二个指针
MotionEvent类包含所有活动指针的坐标
如果要获取第二个指针的位置,需要调用event.getY(1)
您可能希望遍历所有活动点,通过
event.getPointerCount()
获取总计数,然后相应地发送事件。为什么只看到单个指针的值,主要问题是因为event.getY()
不带任何参数可为您提供第一个指针索引的位置,即使实际移动的指针是第二个指针
MotionEvent类包含所有活动指针的坐标
如果要获取第二个指针的位置,需要调用event.getY(1)
您可能希望遍历所有活动点,通过
event.getPointerCount()
获取总计数,然后相应地发送事件。为什么只看到单个指针的值,主要问题是因为event.getY()
不带任何参数可为您提供第一个指针索引的位置,即使实际移动的指针是第二个指针
MotionEvent类包含所有活动指针的坐标
如果要获取第二个指针的位置,需要调用event.getY(1)
您可能希望遍历所有活动点,通过
event.getPointerCount()
获取总计数,然后相应地发送事件。为什么只看到单个指针的值,主要问题是因为event.getY()
不带任何参数可为您提供第一个指针索引的位置,即使实际移动的指针是第二个指针
MotionEvent类包含所有活动指针的坐标
如果要获取第二个指针的位置,需要调用event.getY(1)
您可能希望遍历所有活动点,通过event.getPointerCount()
获取总计数,然后相应地发送事件
// touched
private static final int INVALID_POINTER_ID = -1;
private int _activePointer = INVALID_POINTER_ID;
private int _newPointer = INVALID_POINTER_ID;