gpt4 book ai didi

java - Android 多点触控无法正常工作

转载 作者:行者123 更新时间:2023-11-29 22:06:57 25 4
gpt4 key购买 nike

我正在为一款基于 Android 表面 View 的游戏设计虚拟按钮。我已经覆盖了 onTouch(MotionEvent event) 方法来执行多点触控功能,但它的行为并不像我想要的那样。当触摸一根手指时,第二根手指不会被识别,因此我无法执行所需的功能。这是我覆盖的方法的代码。

@Override
public boolean onTouchEvent(MotionEvent event){

touchX = (int)event.getX();
touchY = (int)event.getY();

int action = event.getActionMasked();//event.getAction() & MotionEvent.ACTION_MASK;

if(touchX >= 0 && touchX <= leftbutton.getWidth() && touchY >= this.getHeight() - 100 && touchY <= this.getHeight()){
if (action == MotionEvent.ACTION_DOWN){
starship.setLeftRight(1, 0, true);
leftButton.update(touchedleftbutton);
}
else if (action == MotionEvent.ACTION_UP){
starship.setLeftRight(0, 0, false);
leftButton.update(leftbutton);
}
else if (action == MotionEvent.ACTION_POINTER_DOWN){
starship.setLeftRight(1, 0, true);
leftButton.update(touchedleftbutton);
}
else if (action == MotionEvent.ACTION_POINTER_UP){

starship.setLeftRight(0, 0, false);
leftButton.update(leftbutton);
}
}
else if (touchX >= 20 + leftbutton.getWidth() && touchX <= 20 + leftbutton.getWidth() + rightbutton.getWidth() && touchY >= this.getHeight() - 100 && touchY <= this.getHeight()){
if (action == MotionEvent.ACTION_DOWN){
starship.setLeftRight(0, 1, true);
rightButton.update(touchedrightbutton);
}
else if (action == MotionEvent.ACTION_UP){
starship.setLeftRight(0, 0, false);
rightButton.update(rightbutton);
}
else if (action == MotionEvent.ACTION_POINTER_DOWN){
starship.setLeftRight(0, 1, true);
rightButton.update(touchedrightbutton);
}
else if (action == MotionEvent.ACTION_POINTER_UP){
starship.setLeftRight(0, 0, false);
rightButton.update(rightbutton);
}
}

else if(touchX >= this.getWidth() - shootbutton.getWidth() && touchY >+ this.getHeight() - 100 && touchY < this.getHeight()){
if (action == MotionEvent.ACTION_DOWN){

shootButton.update(shoottouched);
}
else if (action == MotionEvent.ACTION_UP){

shootButton.update(shootbutton);
}
else if (action == MotionEvent.ACTION_POINTER_DOWN){

shootButton.update(shoottouched);
}
else if (action == MotionEvent.ACTION_POINTER_UP){

shootButton.update(shootbutton);
}
}

return true;
}

--------------------------------------------编辑----------------------------------------

我能够解决我的问题,现在一切正常。这是我更新的代码。希望它能帮助任何和我有同样问题的人。

@Override
public boolean onTouchEvent(MotionEvent event){

int action = event.getActionMasked();//event.getAction() & MotionEvent.ACTION_MASK;
int pointerIndex = (event.getAction() & MotionEvent.ACTION_POINTER_ID_MASK) >> MotionEvent.ACTION_POINTER_ID_SHIFT;
int pointerID = event.getPointerId(pointerIndex);
int pointerCount = event.getPointerCount();

touchX = new int[pointerCount];
touchY = new int[pointerCount];

for(int i = 0; i<pointerCount; i++){

touchX[i] = (int) event.getX(i);
touchY[i] = (int) event.getY(i);

}
switch(action){

case MotionEvent.ACTION_DOWN:
if(touchX[0] >= 0 && touchX[0] <= leftbutton.getWidth() && touchY[0] >= this.getHeight() - 100 && touchY[0] <= this.getHeight()){
starship.setLeftRight(1, 0, true);
leftButton.update(touchedleftbutton);

}
else if (touchX[0] >= 20 + leftbutton.getWidth() && touchX[0] <= 20 + leftbutton.getWidth() + rightbutton.getWidth() && touchY[0] >= this.getHeight() - 100 && touchY[0] <= this.getHeight()){

starship.setLeftRight(0, 1, true);
rightButton.update(touchedrightbutton);
}
else if(touchX[0] >= this.getWidth() - shootbutton.getWidth() && touchY[0] >+ this.getHeight() - 100 && touchY[0] < this.getHeight()){
shootButton.update(shoottouched);
}

break;

case MotionEvent.ACTION_UP:
if(touchX[0] >= 0 && touchX[0] <= leftbutton.getWidth() && touchY[0] >= this.getHeight() - 100 && touchY[0] <= this.getHeight()){
starship.setLeftRight(0, 0, false);
leftButton.update(leftbutton);

}
else if (touchX[0] >= 20 + leftbutton.getWidth() && touchX[0] <= 20 + leftbutton.getWidth() + rightbutton.getWidth() && touchY[0] >= this.getHeight() - 100 && touchY[0] <= this.getHeight()){

starship.setLeftRight(0, 0, false);
rightButton.update(rightbutton);
}
else if(touchX[0] >= this.getWidth() - shootbutton.getWidth() && touchY[0] >+ this.getHeight() - 100 && touchY[0] < this.getHeight()){
shootButton.update(shootbutton);
}

break;

case MotionEvent.ACTION_POINTER_DOWN:
if(touchX[pointerID] >= 0 && touchX[pointerID] <= leftbutton.getWidth() && touchY[pointerID] >= this.getHeight() - 100 && touchY[pointerID] <= this.getHeight()){
starship.setLeftRight(1, 0, true);
leftButton.update(touchedleftbutton);

}
else if (touchX[pointerID] >= 20 + leftbutton.getWidth() && touchX[pointerID] <= 20 + leftbutton.getWidth() + rightbutton.getWidth() && touchY[pointerID] >= this.getHeight() - 100 && touchY[pointerID] <= this.getHeight()){

starship.setLeftRight(0, 1, true);
rightButton.update(touchedrightbutton);
}
else if(touchX[pointerID] >= this.getWidth() - shootbutton.getWidth() && touchY[pointerID] >+ this.getHeight() - 100 && touchY[pointerID] < this.getHeight()){
shootButton.update(shoottouched);
}

break;

case MotionEvent.ACTION_POINTER_UP:
if(touchX[pointerID] >= 0 && touchX[pointerID] <= leftbutton.getWidth() && touchY[pointerID] >= this.getHeight() - 100 && touchY[pointerID] <= this.getHeight()){
starship.setLeftRight(0, 0, false);
leftButton.update(leftbutton);

}
else if (touchX[pointerID] >= 20 + leftbutton.getWidth() && touchX[pointerID] <= 20 + leftbutton.getWidth() + rightbutton.getWidth() && touchY[pointerID] >= this.getHeight() - 100 && touchY[pointerID] <= this.getHeight()){

starship.setLeftRight(0, 0, false);
rightButton.update(rightbutton);
}
else if(touchX[pointerID] >= this.getWidth() - shootbutton.getWidth() && touchY[pointerID] >+ this.getHeight() - 100 && touchY[pointerID] < this.getHeight()){
shootButton.update(shootbutton);
}

break;
}
return true;
}

最佳答案

我在 nexus one 中编写 Android 多点触控代码和测试的经历令人沮丧。

我最终使用了 android-multitouch-controller .该库将使您更好地了解如何处理所有警告。

关于java - Android 多点触控无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10573637/

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