我有一个视图,在该视图上我将一个StateListDrawable(定义state_pressed和默认状态)设置为backgroundXML 中的一个。这工作正常,所有状态都按预期显示。
我现在想以编程方式在 之上绘制一些东西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>
如何在不过滤stateSetfor的情况下使原始可绘制对象更改其状态state_pressed?