2016-05-17 3 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

В принципе, вы хотите, чтобы «RadioGroup» с 3 пользовательскими «RadioButtons» в форме кнопок. –

ответ

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; 

Где вы будете заменять x цифрами 1-3.

Затем вы можете удалить второй, если полностью обрабатывать событие UP.

Смежные вопросы