将 ColorFilter 应用于 LayerDrawable 内的 Drawable
Posted
技术标签:
【中文标题】将 ColorFilter 应用于 LayerDrawable 内的 Drawable【英文标题】:Apply ColorFilter to a Drawable inside a LayerDrawable 【发布时间】:2014-05-02 04:42:07 【问题描述】:我想在我的游戏中同时显示两辆不同颜色的汽车(比如说红色和蓝色),为此我使用相同的LayerDrawable
(设置为@987654322 的图像资源@) 两辆车:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/car_backstuff"/>
<item android:drawable="@drawable/car_body"/>
<item android:drawable="@drawable/car_frontstuff"/>
</layer-list>
问题是,当我想给汽车上色时,我是这样做的:
_layerDrawable.getDrawable(1).setColorFilter(Color.RED, PorterDuff.Mode.MULTIPLY);_
但是当我为第二辆车这样做时(即使用Color.BLUE
)两辆车都变成蓝色!
我知道这是因为它引用了相同的资源(在这种情况下为 R.drawable.car_body),但我想知道是否有办法为每辆车应用不同的 ColorFilter
,例如在顶部插入另一层车身和乘以它还是什么?
【问题讨论】:
@Hamid Shatu 而不是只编辑我的帖子.. 你能回答吗?甚至尝试? @Vyger 是的,你是对的,我并没有假装他知道解决方案,但是“刚刚编辑了你的问题,抱歉无法回答”就足够了,但没关系。考虑到答案,我正在考虑“改变”颜色Drawable
,这样好吗?
@Der Golem,这对我有用,虽然感觉有点笨拙。我可以让我的drawable改变颜色,但它的尺寸也在改变,我想是因为它是一个插图内的形状。因此,在这种情况下,每种颜色都有一个单独的图层列表。
【参考方案1】:
我回答我自己的问题:
解决方案是为LayerDrawable
调用mutate()
,然后对其中的Drawable
进行任何更改都不会影响到使用相同资源的另一个,这很神奇!
【讨论】:
以上是关于将 ColorFilter 应用于 LayerDrawable 内的 Drawable的主要内容,如果未能解决你的问题,请参考以下文章