首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >setColorFilter设置的颜色消失在前棒棒糖设备上

setColorFilter设置的颜色消失在前棒棒糖设备上
EN

Stack Overflow用户
提问于 2017-03-23 17:03:53
回答 2查看 200关注 0票数 0

我有一个有图标的TabLayout。其想法是改变运行时的颜色。我有和xml可绘制文件的状态: state_pressed,state_selected和默认与相同的白色图片,以便我可以放颜色以后。我拿着不同州的抽屉:

Drawable[] drawables = stateListDrawable.getConstantState();

对于每个可绘制的状态,我从另一个数组中放置颜色:

Drawablesi.setColorFilter(彩色,PorterDuff.Mode.MULTIPLY);

问题是,颜色在开始时是可见的,但是当我开始点击图标时,所有的图标又变白了,我失去了颜色。

棒棒糖和以上产品的一切都如预期的那样运转。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-24 10:39:28

我找到了我的解决方案,它看起来一点也不干净,但至少它是有效的:)

我创建了CustomStateListDrawable,它是从StateListDrawable扩展而来的,并为不同的状态添加了绘图。然后,我重写了类中的所有方法,以查看哪些方法被调用,并试图更改其中的颜色。调用的时间足够晚(我的更改在我完成更改后不会被覆盖)是getState()。我还创建了一个ColorStateList对象来保存我的颜色,所以代码如下所示:

代码语言:javascript
复制
       private ColorStateList colorStateList;


        public int[] getState() {
                if (colorStateList != null) {
                    // Resolve the color for the current state
                    int color = colorStateList.getColorForState(super.getState(), 0);
                    // Get the current drawable and changed its color. 
                    if (getCurrent() != null) {
                        getCurrent().setColorFilter(color, PorterDuff.Mode.MULTIPLY);
                    }
                }
                return super.getState();
            }

基本上,每次状态发生变化时,我都会得到可绘制的当前图形,并更改其颜色。

票数 0
EN

Stack Overflow用户

发布于 2017-03-23 17:11:00

使用v4支持库中的tint方法

代码语言:javascript
复制
drawables[i] = DrawableCompat.wrap(drawables[i])
DrawableCompat.setTint(drawables[i], colors[i])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42982536

复制
相关文章

相似问题

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