2016-05-17 19 views
0

Ich habe drei Tasten, die Bilder auf dem Bildschirm sind. Wenn der Benutzer auf den Bildschirm innerhalb des Bereichs der Schaltfläche drückt, wird der boolesche Wert, der besagt, dass die Schaltfläche gedrückt wird, auf wahr gesetzt. Das funktioniert großartig, außer dass ich drei Tasten habe. Wenn ich also zwei Tasten drücke und eine hochhebe, drehen sich alle Tasten, als hätte ich sie nie gedrückt. Ich weiß, wo ich das lösen muss, aber ich weiß nicht wie. Wie kann ich das beheben, so dass, wenn ich zwei Tasten gedrückt habe, wenn ich meinen Finger von einer Taste abhebe, die andere Taste nicht "nicht gedrückt" wird, sondern "gedrückt" bleibt?Taste gedrückt halten, wenn andere Tasten nicht gedrückt werden

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

Scheint eine Runde um es zu tun. Wie auch immer, werden Ihre TOUCH_DOWN-Ereignisse korrekt ausgelöst? –

+0

@AnudeepBulla Ja, alle TOUCH_DOWN-Ereignisse funktionieren ordnungsgemäß. Ich denke, das Problem ist in den TOUCH_UP-Ereignissen, aber ich bin mir nicht sicher, wie man das aufstellt – user2712795

+1

Grundsätzlich wollen Sie eine 'RadioGroup' mit 3 benutzerdefinierten' RadioButtons' in Form von Buttons. –

Antwort

3

Das ist das Problem:

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

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

Jedesmal, wenn ein TouchEvent.TOUCH_UP Ereignis registriert wird, werden alle Tasten freigegeben. Versuchen Sie, dieselbe Logik zu verwenden, um zu bestimmen, welche Tasten gedrückt wurden, um festzustellen, welche Taste losgelassen wurde.

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

Ich denke immer noch, dass dies eine Art und Weise ist, etwas zu tun. Selbst wenn er so etwas vorhat, würde vielleicht ein normaler Toggle ohne all die 6 If's auskommen? –

+0

Ich stimme zu, ich denke, es ist ineffizient und nicht der beste Weg. Wie auch immer, ich beantwortete seine Frage nur im Zusammenhang damit, wie er die Dinge bereits tat. Ich kenne seine Motive nicht. – RScottCarson

1

Dies scheint eine runde über Weg, dies zu erreichen. Aber wenn Sie das so wollen, wird vielleicht nur das Umschalten der booleschen Flagge das erreichen, was Sie brauchen.

Ändern Sie einfach die erste, wenn die Bedingung zu

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

und wann immer Sie den Booleschen flach einstellen, invertieren. So,

BxPressed = !BxPressed; 

Wo würden Sie das x durch die Nummern 1-3 ersetzen.

Sie können dann die zweite Option entfernen, um das UP-Ereignis vollständig zu behandeln.

Verwandte Themen