この簡単なゲームでは、押したボタンの背景色を変更したいと思います。しかし、次の結果が得られます。ボタンの外観が悪くなります(形状が異なります)。
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;
}
}
pressedButton.getBackground().setColorFilter(Color.RED, PorterDuff.Mode.MULTIPLY);
ドローアブルフォルダに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"
/>
@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);
}
赤い色が安定するように
これを試して :
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"/>