Rendere trasparente un pulsante e poi di nuovo opaco in Android
-
28-10-2019 - |
Domanda
Ho un gioco in cui sto usando 12 pulsanti senza testo per visualizzare vite. Ogni volta che perdono una vita, questo codice viene eseguito
public void guessesRemainingDisplay(int numberOfGuesses) {
int guessesRemaining;
guessesRemaining = maximumGuesses + 1 - numberOfGuesses;
switch(guessesRemaining) {
case 1:
findViewById(R.id.Guess1).setBackgroundColor(color.transparent);
break;
case 2:
findViewById(R.id.Guess2).setBackgroundColor(color.transparent);
break;
case 3:
findViewById(R.id.Guess3).setBackgroundColor(color.transparent);
break;
case 4:
findViewById(R.id.Guess4).setBackgroundColor(color.transparent);
break;
case 5:
findViewById(R.id.Guess5).setBackgroundColor(color.transparent);
break;
case 6:
findViewById(R.id.Guess6).setBackgroundColor(color.transparent);
break;
case 7:
findViewById(R.id.Guess7).setBackgroundColor(color.transparent);
break;
case 8:
findViewById(R.id.Guess8).setBackgroundColor(color.transparent);
break;
case 9:
findViewById(R.id.Guess9).setBackgroundColor(color.transparent);
break;
case 10:
findViewById(R.id.Guess10).setBackgroundColor(color.transparent);
break;
case 11:
findViewById(R.id.Guess11).setBackgroundColor(color.transparent);
break;
case 12:
findViewById(R.id.Guess12).setBackgroundColor(color.transparent);
break;
}
}
E il pulsante più a destra più lontano scompare (sono in linea, 1 a sinistra 12 a destra).
Tuttavia, quando inizio un nuovo gioco o quando si apre l'attività, questo codice viene eseguito
findViewById(R.id.Guess1).setBackgroundColor(color.X);
Ripetuto per ogni singolo ID. X essendo letteralmente qualsiasi colore (l'ho provato con un sacco di diversi). Per qualche motivo, se questo codice viene mai eseguito, il pulsante scompare. Come mai? Se non è in esecuzione, i 12 pulsanti appaiono, ma ogni volta che inizio un nuovo gioco ovviamente i pulsanti che sono scomparsi a causa della perdita di vite non tornano.
Soluzione
Per il tuo compito è meglio usare findViewById(R.id.id).setVisibility(View.Invisible)
per scomparire e "findViewById (R.id.id) .SetVisibility (View.Visible)" per la vista di ritorno.