我有一个视图,在该视图上我将一个StateListDrawable
(定义state_pressed
和默认状态)设置为background
XML 中的一个。这工作正常,所有状态都按预期显示。
我现在想以编程方式在 之上绘制一些东西StateListDrawable
,无论它处于哪种状态。为此,我创建了一个扩展的 Java 类Drawable
,它包含原始背景可绘制对象;它onDraw
首先将原始可绘制对象绘制到画布上,然后将其添加到画布上。这也有效,但原始可绘制对象的状态不会改变。
我可以看到setState
我的自定义Drawable
是用stateSet
包含android.R.attr.state_pressed
其他一些状态的 a 调用的。我将该调用委托给原始可绘制对象,但setState
总是返回false
并且其状态不会改变。只有当我传递一个只stateSet
包含.android.R.attr.state_pressed
似乎可以以StateListDrawable
某种方式宣布它感兴趣的 stateSets 和尊重它的调用者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
for的情况下使原始可绘制对象更改其状态state_pressed
?