4

在此具体情况Activity下,用户应在石头剪刀布游戏中选择玩家 1 和玩家 2 中选择的析构函数。

我尝试了几种方法:第一种是简单地让选定的ImageButton点击,但我没有找到任何解决方案来实现这一点。

第二个是设置选择的ImageButton不可点击并更改其Image,如下图所示。在那里,玩家 1 选择了“岩石”,而玩家 2 还没有选择。如您所见,只要我更改Imagean 的 s ImageButton,边框就会消失。

在此处输入图像描述

我像这样改变Buttons的状态

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 Buttons,与此方法类似。现在,我认为ImageButton用简单的方式覆盖样式Image会使我的自定义样式的边框ImageButton消失,但这只是猜测。

我编写了第二个ImageButton具有不同背景颜色和相同边框的自定义样式,但我不知道如何在ImageButtonfrom 代码上设置该样式。

所以我的问题是,哪种方法最聪明地解决这个问题(我认为是第三种,但也许还有另一种),如果是第三种,如何设置ImageButtonfrom 代码的样式。

编辑:

与 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不是'不再缩放(没关系,因为我更喜欢这样)

所以基本上,它看起来像我在上面发布的图像,除了Images 由于没有缩放而有点大(在layout.xml,我设置scaleType="fitCenter"

4

2 回答 2

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>

有关完整的可绘制文档,请参阅http://developer.android.com/guide/topics/resources/drawable-resource.html。对于您的情况,请参阅“状态选择器”。

您甚至可以使用 setSelected()、setEnabled(() 等以编程方式更改按钮的状态。

于 2012-11-01T23:13:13.167 回答
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() + "");
}
}

活动主.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>

图片: 图片 图片

PS要缩放图像,您可以使用选项:

<ImageView
android:scaleType="scaleXY" />
于 2012-11-02T00:12:12.733 回答