1. ホーム
  2. android

[解決済み] プログラムによるセレクタ画像の置き換え

2022-05-16 07:50:59

質問

セレクタに設定された描画可能な画像リソースを持つImageViewを持っています。プログラムでセレクタにアクセスし、ハイライト状態と非ハイライト状態の画像を変更するにはどうすればよいでしょうか。

以下はセレクタのコードです。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/iconSelector">
  <!-- pressed -->
  <item android:state_pressed="true" android:drawable="@drawable/btn_icon_hl" />
  <!-- focused -->
  <item android:state_focused="true" android:drawable="@drawable/btn_icon_hl" />
  <!-- default -->
  <item android:drawable="@drawable/btn_icon" />
</selector>

を置き換えることができるようにしたい。 btn_icon_hlbtn_icon を他の画像で表示します。

どのように解決するのですか?

私が見つけた限りでは (私も似たようなことを試してみました)、StateListDrawable がすでに定義された後に、単一の状態を変更する方法はありません。しかし、コードを通じて新しいものを定義することはできます。

StateListDrawable states = new StateListDrawable();
states.addState(new int[] {android.R.attr.state_pressed},
    getResources().getDrawable(R.drawable.pressed));
states.addState(new int[] {android.R.attr.state_focused},
    getResources().getDrawable(R.drawable.focused));
states.addState(new int[] { },
    getResources().getDrawable(R.drawable.normal));
imageView.setImageDrawable(states);

そして、2つ手元に置いておけばいいし、必要に応じて違うものを作ればいいのです。