我有一个视图,在其上我将StateListDrawable
(定义{{1}}和默认状态)设置为XML中的state_pressed
。这很好,所有状态都按预期显示。
我现在想以编程方式在background
之上绘制一些内容,无论它处于哪种状态。为此,我创建了一个扩展StateListDrawable
的Java类,它保留了原始的可绘制背景;在Drawable
中,它首先将原始drawable绘制到画布上,然后绘制自己的附加内容。这也有效,但原始drawable的状态不会改变。
我可以看到我的自定义onDraw
的{{1}}被setState
调用,其中包含Drawable
其他州。我将该调用委托给原始drawable,但stateSet
始终返回android.R.attr.state_pressed
并且其状态不会更改。只有在我传递的setState
除了false
之外,它才会发生变化。
似乎stateSet
以某种方式可以宣布它感兴趣的stateSets和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
的{{1}}的情况下使原始drawable更改其状态?
答案 0 :(得分:1)
感谢pskink的示例,我尝试在invalidateSelf
中调用onStateChanged
,这就是诀窍。