在此具体情况Activity
下,用户应在石头剪刀布游戏中选择玩家 1 和玩家 2 中选择的析构函数。
我尝试了几种方法:第一种是简单地让选定的ImageButton
点击,但我没有找到任何解决方案来实现这一点。
第二个是设置选择的ImageButton
不可点击并更改其Image
,如下图所示。在那里,玩家 1 选择了“岩石”,而玩家 2 还没有选择。如您所见,只要我更改Image
an 的 s ImageButton
,边框就会消失。
我像这样改变Button
s的状态
public void onClickRock1(View v){
choosenDestructor1 = 1;
buttonRock1.setImageResource(R.drawable.rock_clicked);
buttonRock1.setBackgroundColor(getResources().getColor(R.color.button_background_stay_clicked));
buttonRock1.setClickable(false);
buttonPaper1.setImageResource(R.drawable.paper);
buttonPaper1.setBackgroundColor(getResources().getColor(R.color.button_background));
buttonPaper1.setClickable(true);
buttonScissors1.setImageResource(R.drawable.scissors);
buttonScissors1.setBackgroundColor(getResources().getColor(R.color.button_background));
buttonScissors1.setClickable(true);
}
对于所有其他 5 Button
s,与此方法类似。现在,我认为ImageButton
用简单的方式覆盖样式Image
会使我的自定义样式的边框ImageButton
消失,但这只是猜测。
我编写了第二个ImageButton
具有不同背景颜色和相同边框的自定义样式,但我不知道如何在ImageButton
from 代码上设置该样式。
所以我的问题是,哪种方法最聪明地解决这个问题(我认为是第三种,但也许还有另一种),如果是第三种,如何设置ImageButton
from 代码的样式。
编辑:
与 rgrocha 的回答类似,我编辑了我的selector
(已集成在 中custom_imagebutton.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/rock">
<shape>
<solid
android:color="@color/button_background" />
<stroke
android:width="2dp"
android:color="#FFF716" />
<padding
android:left="10dp"
android:top="10dp"
android:right="10dp"
android:bottom="10dp" />
</shape>
</item>
<item android:state_selected="true" android:drawable="@drawable/rock_clicked">
<shape>
<solid
android:color="@color/button_background_stay_clicked" />
<stroke
android:width="2dp"
android:color="#FFF716" />
<padding
android:left="10dp"
android:top="10dp"
android:right="10dp"
android:bottom="10dp" />
</shape>
</item>
<item android:drawable="@drawable/rock">
<shape>
<solid
android:color="@color/button_background" />
<stroke
android:width="1dp"
android:color="#FFFFFF" />
<corners
android:radius="0dp" />
<padding
android:left="10dp"
android:top="10dp"
android:right="10dp"
android:bottom="10dp" />
</shape>
</item>
</selector>
和这样的onClickRock1
方法
public void onClickRock1(View v){
choosenDestructor1 = 1;
buttonRock1.setSelected(true);
buttonPaper1.setSelected(false);
buttonScissors1.setSelected(false);
}
像这样解决它的结果是custom_imagebutton.xml
为每个ImageButton
(石头,纸,剪刀)制作一个,并且出现以下问题:1.边框不可见(这很重要,因为我想要这些边框)2.Image
不是'不再缩放(没关系,因为我更喜欢这样)
所以基本上,它看起来像我在上面发布的图像,除了Image
s 由于没有缩放而有点大(在layout.xml
,我设置scaleType="fitCenter"
)