2016-05-17 183 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事件。