2012-09-27 1 views
6

enter image description heresetBackgroundColor in Android

In questo semplice gioco voglio cambiare il colore del bottone che si preme sfondo. Ma ottengo il seguente risultato, l'aspetto pulsanti non diventa buono (la forma diventa diverso):

pressedButton.setBackgroundColor(Color.RED); 

C'è un modo migliore per farlo? Grazie.

[Edit: il mio codice completo]

package com.example.xo_game; 

import android.os.Bundle; 
import android.app.Activity; 
import android.graphics.Color; 
import android.view.Menu; 
import android.view.View; 
import android.widget.Button; 

public class MainActivity extends Activity { 

    Button[] btns; 
    char[][] gameState = new char[3][3]; 
    char turn = 'X'; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     Button[] btns = new Button[9]; 

     btns[0] = (Button) findViewById(R.id.btn1); 
     btns[1] = (Button) findViewById(R.id.btn2); 
     btns[2] = (Button) findViewById(R.id.btn3); 

     btns[3] = (Button) findViewById(R.id.btn4); 
     btns[4] = (Button) findViewById(R.id.btn5); 
     btns[5] = (Button) findViewById(R.id.btn6); 

     btns[6] = (Button) findViewById(R.id.btn7); 
     btns[7] = (Button) findViewById(R.id.btn8); 
     btns[8] = (Button) findViewById(R.id.btn9); 

     for (int i = 0; i < 9; i++) { 
      btns[i].setTag(i); 
      btns[i].setOnClickListener(clickListener); 
      gameState[i/3][i % 3] = 'E'; 
     } 
    } 

    View.OnClickListener clickListener = new View.OnClickListener() { 

     public void onClick(View v) { 
      Button pressedButton = (Button) v; 

      int indexOfPressedButton = Integer.parseInt(pressedButton.getTag() 
        .toString()); 

      int row = indexOfPressedButton/3; 
      int col = indexOfPressedButton % 3; 

      if (gameState[row][col] != 'E') 
       return; 

      gameState[row][col] = turn; 

      String turnAsString = String.valueOf(turn); 

      pressedButton.setText(turnAsString); 

      if (turn == 'X') { 
       pressedButton.setBackgroundColor(Color.RED); 
       turn = 'O'; 
      } else { 
       pressedButton.setBackgroundColor(Color.GREEN); 
       turn = 'X'; 
      } 
     } 
    }; 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.activity_main, menu); 
     return true; 
    } 
} 
+1

inserisci il tuo codice! – Shrikant

+0

post modificato, ho aggiunto il codice completo. –

+0

grazie per avermelo chiesto - questa era esattamente la mia domanda! –

risposta

17
pressedButton.getBackground().setColorFilter(Color.RED, PorterDuff.Mode.MULTIPLY); 
+1

La classe PorterDuff non è definita. Dovrei importare qualcosa? –

+2

import android.graphics.PorterDuff; –

+1

bello, ora funziona. –

0

provare questo:

avete creare così nel ImageButton xml

creare file XML utilizzando l'immagine del pulsante come questo

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item 
android:state_pressed="true" 
android:drawable="@drawable/backbutton" /> 
<item 
android:drawable="@drawable/closebutton" /> 
</selector> 

aggiungere che file XML come sfondo per ImageButton

<ImageButton     
android:layout_height="50px" 
android:layout_width="50px" 
android:id="@+id/settings" 
android:background="@drawable/settings_button" //setting_button in 
                the xml file    
android:text="Settings"/> 
6

creare il file di selezione qualsiasi nome come button_selector.xml nella cartella drawable

cura con gradiente

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item android:state_pressed="true"> 
     <shape android:shape="rectangle"> 
      <corners android:radius="5dp"/> 
      <gradient android:startColor="#ad1c1c" android:endColor="#cc3737" android:angle="90"/> 
      <padding android:left="10.0dip" android:top="10.0dip" 
       android:right="10.0dip" android:bottom="10.0dip"/> 
      <stroke android:width="1.0dip" android:color="#7d0000"/> 
     </shape> 
    </item> 
    <item android:state_pressed="false"> 
     <shape android:shape="rectangle"> 
      <corners android:radius="5dp"/> 
      <gradient android:startColor="#cfcfcf" android:endColor="#ebebeb" android:angle="90"/> 
      <padding android:left="10.0dip" android:top="10.0dip" 
       android:right="10.0dip" android:bottom="10.0dip"/> 
      <stroke android:width="1.0dip" android:color="#8f8f8f"/> 
     </shape> 
    </item> 
</selector> 

quindi impostare a sfondo pulsante

<Button 
    android:background="@drawable/button_selector" 
/> 
+0

Grazie per la tua risposta, ma in realtà ho ottenuto quasi il risultato precedente. –

+0

Se è corretto, devi accettare una delle risposte più vicine alla tua soluzione – Pratik

+0

Sto provando tutte le risposte una dopo l'altra. Finora, tutti cambiano la forma del pulsante in un quadrato. –

1

Come @pratik detto memorizza la button.xml nella cartella drawable

button.xml

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item android:state_pressed="true"> 
     <shape android:shape="rectangle"> 
      <corners android:radius="5dp"/> 
      <solid android:color="#f00"/> 
      <padding android:left="10.0dip" android:top="10.0dip" 
       android:right="10.0dip" android:bottom="10.0dip"/> 
      <stroke android:width="1.0dip" android:color="#222"/> 
     </shape> 
    </item> 
    <item android:state_pressed="false"> 
     <shape android:shape="rectangle"> 
      <corners android:radius="5dp"/> 
      <solid android:color="#f1f1f1"/> 
      <padding android:left="10.0dip" android:top="10.0dip" 
       android:right="10.0dip" android:bottom="10.0dip"/> 
      <stroke android:width="1.0dip" android:color="#222"/> 
     </shape> 
    </item> 
</selector> 

applicato questo tasto come sfondo

<Button 
    android:background="@drawable/button"/> 

e nel vostro file di classe piace questo

public void onClick(View v) { 

    pressedButton.setPressed(true); 
} 

in modo che il colore rosso sia stabile

+1

hmmm copia la risposta mantienilo ma hai bisogno di un trucco per l'utente non creato dall'utente modificando la risposta copiata con qualche altro valore – Pratik