2016-05-17 185 views
0

我有三个按钮,它们是屏幕上的图像。当用户按下按钮区域内的屏幕时,按下按钮的布尔值变为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; 
} 
+0

似乎有一个方法来做到这一点。无论如何,你的TOUCH_DOWN事件是否正确触发? –

+0

@AnudeepBulla是的所有TOUCH_DOWN事件都能正常工作。我认为问题出在TOUCH_UP事件中,但我不知道如何设置 – user2712795

+1

基本上,你想要一个带有3个自定义的RadioButtons的'RadioGroup'形状如按钮。 –

回答

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 
} 

} 
+0

我仍然认为这是一个关于做事的方式。即使这是他计划如何做的事情,也许正常的切换会在没有所有6个如果的情况下完成。 –

+0

我同意,我认为它效率低下,不是最好的方法。不过,我只是在他已经在做事情的情况下回答他的问题。我不知道他的动机。 – RScottCarson

1

这似乎是一个关于如何实现这一点的方法。但是,如果然而,这是你如何去做,也许只是切换布尔标志将完成你所需要的。

只要改变第一,如果条件

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

,并当过你设置布尔平,反其道而行。像这样,

BxPressed = !BxPressed; 

你会在哪里用数字1-3代替x。

然后,您可以删除第二个,以完全处理UP事件。