在这个特定的Activity
中,用户应该选择在摇滚剪刀游戏中选择的玩家1和玩家2的析构函数。
我尝试了几种方法:第一种方法是简单地让所选的ImageButton
点击,但我找不到任何解决方案来实现这一点。
第二个是设置选择ImageButton
无法点击并更改其Image
,如下图所示。在那里,玩家1选择了“摇滚”而玩家2没有选择。如您所见,只要我更改Image
的{{1}},边框就会消失。
我改变了ImageButton
s的状态
Button
和所有其他5 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);
}
类似于此方法。现在,我认为用简单的Button
覆盖ImageButton
的样式会使我的自定义Image
样式的边框消失,但这只是猜测。
我写了第二个具有不同背景颜色和相同边框的自定义ImageButton
样式,但我无法弄清楚如何在ImageButton
代码中设置该样式。
所以我的问题是,哪种方法最明智地解决这个问题(我认为是第三种,但也许还有另一种方法)如果是第三种方法,那么如何设置{{1}的样式来自代码。
修改
与rgrocha的回答类比,我编辑了我的ImageButton
(已经集成在ImageButton
中),如下所示
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);
}
,并且以下问题在这里:
1.边界不可见(重要的是,因为我希望有这些边界)
2. custom_imagebutton.xml
不再缩放(这没关系,因为我喜欢它更像这样)
所以基本上,它看起来像我上面发布的图片,除了ImageButton
s由于没有缩放而有点大(在Image
,我设置Image
)< / p>
答案 0 :(得分:2)
您可以为要应用的每个州制作一个可绘制的选择器,并将其设置为主要法师或背景,您可以选择更适合您需要的状态。
在此选择器中,您可以制作边框,颜色,图像,以及任何您想要更改的内容。
选择器如下所示:
<item android:state_pressed="true">
<shape android:shape="rectangle" >
<solid android:color="@color/button_highlight" />
<corners android:radius="5dp" />
</shape>
</item>
<item android:state_selected="true">
<shape android:shape="rectangle" >
<solid android:color="@color/menu_bg_selected" />
<corners android:radius="5dp" />
</shape>
</item>
有关完整的drawable文档,请参阅http://developer.android.com/guide/topics/resources/drawable-resource.html。对于您的情况,请参阅“状态选择器”。
您甚至可以使用setSelected(),setEnabled(()等以编程方式更改按钮的状态。
答案 1 :(得分:0)
根据选择者的说法,这是一个快速工作的例子。我希望它会帮助你一些。
此处适用于具有指定android:background
源的按钮。此示例显示了单击后图像的更改方式。
MainActivity.java:
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
public void onClickButton1(View view) {
//button is selected when false and vice versa
view.setSelected(!view.isSelected());
Log.d("xxx", view.isSelected() + "");
}
public void onClickButton2(View view) {
//same here...
view.setSelected(!view.isSelected());
Log.d("xxx", view.isSelected() + "");
}
public void onClickButton3(View view) {
//same here...
view.setSelected(!view.isSelected());
Log.d("xxx", view.isSelected() + "");
}
}
activity_main.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ImageButton
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="5dip"
android:background="@drawable/button_style"
android:onClick="onClickButton1" />
<ImageButton
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="5dip"
android:background="@drawable/button_style"
android:onClick="onClickButton2" />
<ImageButton
android:id="@+id/button3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="5dip"
android:background="@drawable/button_style"
android:onClick="onClickButton3" />
</LinearLayout>
button_style.xml:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/aselected" android:state_selected="true"/>
<item android:drawable="@drawable/anone" />
</selector>
图片:
P.S要缩放图像,您可以使用选项:
<ImageView
android:scaleType="scaleXY" />