私はビューを持っており、その上でStateListDrawable
(定義state_pressed
とデフォルト状態) をbackground
XML として設定しています。これは正常に機能し、すべての状態が期待どおりに表示されます。
StateListDrawable
どの状態であっても、上にプログラムで何かを描画したいと思います。このためにDrawable
、元の背景のドローアブルを保持する を拡張する Java クラスを作成しました。最初にonDraw
元のドローアブルをキャンバスに描画し、次に独自の追加を描画します。これも機能しますが、元のドローアブルの状態は変わりません。
setState
私のカスタムは、他の状態を含むDrawable
a で呼び出されていることがわかります。その呼び出しを元のドローアブルに委譲しますが、常に戻り、その状態は変わりません。のみを含むを渡した場合にのみ変更されます。stateSet
android.R.attr.state_pressed
setState
false
stateSet
android.R.attr.state_pressed
ドキュメントやAndroidソースに関連するものは何も見つかりませんでしたが、StateListDrawable
関心のある状態セットとそれを尊重する呼び出し元を何らかの形で発表できるようです。setState
これは私のsetState
です:
@Override public boolean setState(int[] stateSet) {
boolean changed = super.setState(stateSet);
if (originalBackground != null) {
// this call only returns true and changes the state if
// the stateSet *only* contains the pressed state
changed |= originalBackground.setState(stateSet);
}
return true;
}
私の元の背景Drawable
:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
android:drawable="@color/red"/>
<item android:drawable="@color/green"/>
</selector>
stateSet
forをフィルタリングせずに、元のドローアブルの状態を変更するにはどうすればよいstate_pressed
ですか?