簡體   English   中英

按下其他按鈕時保持按下狀態

[英]Keeping button as pressed when other buttons are unpressed

我有三個按鈕,它們是屏幕上的圖像。 當用戶在按鈕區域內的屏幕上按下時,表示按鈕被按下的布爾值將變為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;
}

這就是問題:

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
 }

 }

這似乎是實現此目標的一種方式。 但是,如果這就是您想要的方式,也許只是切換boolean標志就可以完成您所需要的。

只需將第一個if條件更改為

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

當您設置布爾單位時,請將其反轉。 像這樣

BxPressed = !BxPressed;

您將x替換為數字1-3的位置。

然后,如果要一起處理UP事件,則可以刪除第二個。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM