首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >包装StateListDrawable

包装StateListDrawable
EN

Stack Overflow用户
提问于 2013-07-17 13:57:57
回答 1查看 401关注 0票数 0

我有一个视图,在该视图上,我将StateListDrawable (定义state_pressed和默认状态)设置为background。这很好,所有的状态都会按预期显示。

现在,我想以编程的方式在StateListDrawable之上绘制一些东西,而不管它处于什么状态。为此,我创建了一个扩展Drawable的Java类,它保存了原始的背景绘图;在onDraw中,它首先将可绘制的原始绘图绘制到画布上,然后自己添加。这也是可行的,但原始绘图的状态不会改变。

我可以看到,调用自定义DrawableDrawablestateSet包含了其他状态中的android.R.attr.state_pressed。我将该调用委托给原始可绘制的,但是setState总是返回false,其状态不会改变。只有当我传递一个只包含android.R.attr.state_pressed. stateSet时,它才会改变。

似乎StateListDrawable可以以某种方式宣布它感兴趣的stateSets和setState的调用者对此感兴趣,尽管我在文档或安卓源代码中没有找到任何相关信息。

这是我的setState

代码语言:javascript
复制
@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

代码语言:javascript
复制
<?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筛选

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-17 14:34:13

由于pskink的例子,我尝试调用invalidateSelf in onStateChanged,这就成功了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17701802

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档