我有一個視圖,我在其中設置StateListDrawable
(定義state_pressed
和默認狀態)作爲XML中的background
。這工作正常,所有狀態都按預期顯示。包裝StateListDrawable
我現在想以編程的方式在StateListDrawable
上繪製一些東西,不管它處於哪種狀態。爲此,我創建了一個擴展了Drawable
的Java類,它保存了原始的可繪製背景;在onDraw
它首先繪製原始繪圖到畫布,然後自己添加。這也適用,但原始可繪製的狀態不會改變。
我可以看到我的自定義Drawable
的setState
被稱爲stateSet
,其中包含android.R.attr.state_pressed
在其他一些州。我將該調用委託給原始可繪製對象,但setState
始終返回false
,並且其狀態不會更改。它只會改變,當我通過stateSet
包含只有android.R.attr.state_pressed
。
好像StateListDrawable
以某種方式可以宣佈它感興趣的stateSet和setState
的調用者,雖然我沒有在文檔或Android源中找到任何相關的東西。
這是我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
爲state_pressed
?
Hannes,請參閱我的答案在這裏:http://stackoverflow.com/questions/13927896/android-button-with-text-and-image/17542264#17542264 – pskink