按下其他按钮时按下按钮

时间:2016-05-17 21:56:02

标签: java android

我有三个按钮是屏幕上的图像。当用户按下按钮区域内的屏幕时,按下该按钮的布尔值变为true。除了我有三个按钮之外,这个效果很好所以当我按住两个按钮并抬起一个按钮时,所有的按钮都会转动,好像我从未按过它们一样。我知道在哪里解决这个问题,但我不知道如何解决。如何解决这个问题,如果我按下两个按钮,当我从一个按钮上抬起手指时,另一个按钮不会被按下"没有按下"但仍然按下"?

boolean B1Pressed = false;
boolean B2Pressed = false;
boolean B3Pressed = false;

int len = touchEvents.size();
 for (int i = 0; i < len; i++) {
 TouchEvent event = touchEvents.get(i);

 if (event.type == TouchEvent.TOUCH_DOWN) {

 if (inBounds(event, 340,512,140,140)) {
  B1Pressed = true;
  Log.d("GameScreen", "Button 1 Pressed");
 // Button 1
 }

 if (inBounds(event, 340,320,140,140)) {
  B2Pressed = true;
  Log.d("GameScreen", "Button 2 Pressed");
 // Button 2
 }

 if (inBounds(event, 340,120,140,140)) {
  B3Pressed = true;
  Log.d("GameScreen", "Button 3 Pressed");
 // Button 3
 }

 }

 if (event.type == TouchEvent.TOUCH_UP) {

 B1Pressed = false;
 B2Pressed = false;
 B3Pressed = false;
}   
private boolean inBounds(TouchEvent event, int x, int y, int width,
        int height) {
    if (event.x > x && event.x < x + width - 1 && event.y > y
            && event.y < y + height - 1)
        return true;
    else
        return false;
}

2 个答案:

答案 0 :(得分:3)

这是问题所在:

if (event.type == TouchEvent.TOUCH_UP) {

    B1Pressed = false;
    B2Pressed = false;
    B3Pressed = false;
}   

无论何时注册TouchEvent.TOUCH_UP事件,都会释放所有按钮。尝试使用相同的逻辑来确定已按下哪些按钮以确定已释放哪个按钮。

if (event.type == TouchEvent.TOUCH_UP) {

 if (inBounds(event, 340,512,140,140)) {
     B1Pressed = false;
     Log.d("GameScreen", "Button 1 Released");
     // Button 1
 }

 if (inBounds(event, 340,320,140,140)) {
     B2Pressed = false;
     Log.d("GameScreen", "Button 2 Released");
     // Button 2
 }

 if (inBounds(event, 340,120,140,140)) {
     B3Pressed = false;
     Log.d("GameScreen", "Button 3 Released");
 // Button 3
 }

 }

答案 1 :(得分:1)

这似乎是实现这一目标的一种方式。但是,如果你想要这样做,也许只需切换布尔标志即可完成你所需要的。

只需将第一个if条件更改为

即可
if (event.type == TouchEvent.TOUCH_UP || event.type == TouchEvent.TOUCH_DOWN ) {

当你设置布尔平面时,将其反转。像这样,

BxPressed = !BxPressed;

您可以用数字1-3代替x。

然后你可以删除第二个if来完全处理UP事件。