web-dev-qa-db-ja.com

setBackgroundColor in android

enter image description here

この簡単なゲームでは、押したボタンの背景色を変更したいと思います。しかし、次の結果が得られます。ボタンの外観が悪くなります(形状が異なります)。

pressedButton.setBackgroundColor(Color.RED);

それを行うためのより良い方法はありますか?ありがとう。

[編集:私の完全なコード]

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;
    }
}
6
Hamzeh Soboh
pressedButton.getBackground().setColorFilter(Color.RED, PorterDuff.Mode.MULTIPLY);
17
Tamir Scherzer

ドローアブルフォルダにbutton_selector.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"/>
            <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>

次に、ボタンの背景に設定します

<Button
    Android:background="@drawable/button_selector"
/>
6
Pratik

@pratikが言ったように、これを保存してくださいbutton.xmlドローアブルフォルダに

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>

このボタンを背景として適用します

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

そしてあなたのクラスファイルでこのようにします

public void onClick(View v) {

  pressedButton.setPressed(true);
}

赤い色が安定するように

1
Ram kiran

これを試して :

imageButtonxmlでこのように作成しました

このようなボタン画像を使用してxmlファイルを作成します

<?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> 

そのxmlファイルを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"/>