我有一个视图,在该视图上,我将StateListDrawable (定义state_pressed和默认状态)设置为background。这很好,所有的状态都会按预期显示。
现在,我想以编程的方式在StateListDrawable之上绘制一些东西,而不管它处于什么状态。为此,我创建了一个扩展Drawable的Java类,它保存了原始的背景绘图;在onDraw中,它首先将可绘制的原始绘图绘制到画布上,然后自己添加。这也是可行的,但原始绘图的状态不会改变。
我可以看到,调用自定义Drawable的Drawable的stateSet包含了其他状态中的android.R.attr.state_pressed。我将该调用委托给原始可绘制的,但是setState总是返回false,其状态不会改变。只有当我传递一个只包含android.R.attr.state_pressed. stateSet的时,它才会改变。
似乎StateListDrawable可以以某种方式宣布它感兴趣的stateSets和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进行state_pressed筛选
发布于 2013-07-17 14:34:13
由于pskink的例子,我尝试调用invalidateSelf in onStateChanged,这就成功了。
https://stackoverflow.com/questions/17701802
复制相似问题