2011-01-28 8 views
1

ImageButtonが一度押すと、フォーカスが失われるまで「押した」オレンジ色の背景で描画されるエフェクトを実現しようとしています)。Android:フォーカスされた状態で押した状態のドロアブルを使用してImageButtonを描画する方法

StateListDrawableは、この状況のた​​めに意図されているように見えます。なぜなら、フォーカスされた状態でバックグラウンドを描画する方法を定義できるからです。そして、フォーカスされた状態のために、背景が押されたドロウアブルで描画されるべきことを単純に定義できるなら、素晴らしいことでしょう。しかし、私はデフォルトの "押された" drawableを参照する方法はありません。

私はこの効果をどのように達成することができますか?

答えて

1

アンドロイドSDKのドロワブルフォルダを見てください。デフォルトで使用する9つのパッチイメージをすべて見つけることができます。あなたが望むものは、おそらくbtn_pressed、btn_focusedなどと呼ばれます。技術的にはプロジェクトのIDでそれらを参照することはできますが、IDはそのまま維持されるわけではないので、プロジェクトにコピーすることをお勧めします。

+0

ありがとう。私はそれが私の質問に答えるので、これを答えたとマークしますが、実際には私の問題を解決しませんでした。問題は、画像ボタンがタッチの「上」のイベントに焦点を当てていないことが分かります。他の何かがそれをつかむまでフォーカスを保持するようにイメージボタンを欲しいです(他の何かが触れるまでフォーカスされているように)。これに関するアドバイスは? – ab11

+0

ボタンのonClickListener()のonClick(View v)メソッド内でyourButton.requestFocus()を呼び出してみてください。 – FoamyGuy

+0

@ ab11タッチモードでフォーカスできるようにボタンを設定http://developer.android.com/reference/android/view/View.html#attr_android:focusableInTouchMode android:focusableInTouchMode = "true" –

5

私はあなたの質問は、たぶん私は各状態のドローアブルを含むXML背景セレクタを定義し、同じタスクを行うあなた

を助けることができる理解していれば、あなたがなどドローアブル、形状を定義することができますので、このファイルは、より広範です..最も重要な機能は、あなたが好きな描画可能なものや形状を設定することができるということです。

ここで私は背景セレクタを定義しました...そして、セレクタをselector.xmlと呼んで、drawableフォルダに保存しました。私は、上記のセレクタを添付のImageButtonをビルドするとき

<?xml version="1.0" encoding="utf-8"?> 
    <selector xmlns:android="http://schemas.android.com/apk/res/android"> 
     <item android:state_selected="true" android:drawable="@drawable/shape_7"/> 
     <item android:state_pressed="true" android:drawable="@drawable/shape_7" /> 
     <item android:state_pressed="false" android:drawable="@drawable/shape_6" /> 
    </selector> 

後で...

ImageButton imageButton = new ImageButton(this); 
imageButton.setBackgroundDrawable(getResources().getDrawable(R.drawable.selector)); 

またはXMLの方法(あなたがプログラム的にしたり、XMLレイアウトで行うことができます)

<ImageView 
    android:background="@drawable/selector" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:padding="4px" 
    android:src="@drawable/switch_icon"/> 

歓迎

+2

これは便利ですが、しかし、かもしれない主な問題は、私がなるように選択し、押され、集中ドローアブルをしたいということですアンドロイドのデフォルト。とにかくshape_7とshape_6を定義して、デフォルトのアンドロイドのdrawalbesを使用するようにしていますか? (私がデフォルトのアンドロイドドロウラブルを言うとき、私はカスタム背景が設定されていない場合に使用されるものを意味する) – ab11

0

これは私のアプリケーションのHolo Darkテーマで私にとってうまくいきましたが、私は好きな丸いエッジを持っていません。

のres /描画可能/ image_button_background.xml:として

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:drawable="@android:color/holo_blue_dark" android:state_pressed="true"/> 
</selector> 

用途:

android:background="@drawable/image_button_background" 
関連する問題