4

この特定Activityの場合、ユーザーはじゃんけんゲームでプレーヤー1とプレーヤー2から選択したデストラクタを選択する必要があります。

私はいくつかのアプローチを試しました。最初のアプローチは、選択したものをクリックさせるImageButtonことでしたが、それを達成するための解決策は見つかりませんでした。

2つ目は、下の画像に示すように、選択したクリック不可を設定してImageButton変更することでした。Imageそこでは、プレーヤー1には「ロック」が選択され、プレーヤー2にはまだ何も選択されていません。Imageご覧のとおり、のsを変更するとすぐにImageButton、境界線が消えます。

ここに画像の説明を入力してください

Buttonこのようにステータスを変更します

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、この方法と同様に同じです。ImageButtonさて、のスタイルをシンプルで上書きするImageと、カスタムスタイルの境界線がImageButton消えると思いますが、これは推測に過ぎません。

背景色が異なり、境界線が同じである2番目のカスタムスタイルを作成しましたが、 fromコードImageButtonでそのスタイルを設定する方法がわかりません。ImageButton

だから私の質問は、これを解決するのに最も賢い方法はどれか(私は3番目の方法だと思いますが、おそらく別の方法があると思います)、それが3番目の方法である場合、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. Imageisnもうスケーリングされていません(私はこのようにもっと好きなので、これは問題ではありません)

つまり、基本的には、上記で投稿した画像のように見えますが、Imageスケーリングされていないためにsが少し大きくなっています(で、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() + "");
}
}

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>

画像: 画像 画像

PS画像をスケーリングするには、オプションを使用できます:

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