0

私はビューを持っており、その上でStateListDrawable(定義state_pressedとデフォルト状態) をbackgroundXML として設定しています。これは正常に機能し、すべての状態が期待どおりに表示されます。

StateListDrawableどの状態であっても、上にプログラムで何かを描画したいと思います。このためにDrawable、元の背景のドローアブルを保持する を拡張する Java クラスを作成しました。最初にonDraw元のドローアブルをキャンバスに描画し、次に独自の追加を描画します。これも機能しますが、元のドローアブルの状態は変わりません。

setState私のカスタムは、他の状態を含むDrawablea で呼び出されていることがわかります。その呼び出しを元のドローアブルに委譲しますが、常に戻り、その状態は変わりません。のみを含むを渡した場合にのみ変更されますstateSetandroid.R.attr.state_pressedsetStatefalsestateSetandroid.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>

stateSetforをフィルタリングせずに、元のドローアブルの状態を変更するにはどうすればよいstate_pressedですか?

4

1 に答える 1