将ColorFilter应用于LayerDrawable中的Drawable

4

我希望在我的游戏中同时展示两辆不同颜色的汽车(比如红色和蓝色),为此我使用相同的LayerDrawable(将其设置为ImageView的图像资源)来呈现这两辆汽车:

<?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,你能回答这个问题吗?或者至少试着回答一下吗? - Mino
@Vyger 是的,你说得对,我并不是在假装他知道答案,但“刚刚编辑了你的问题,很抱歉无法回答”就足够了,但没关系。考虑到答案,我正在考虑“变异”颜色Drawable,这样好吗? - Mino
@Der Golem,这对我来说是有效的,尽管感觉有点笨重。我可以改变我的可绘制对象的颜色,但它的尺寸也在改变,我认为这是因为它是一个嵌套的形状。所以,在这种情况下,为每个颜色创建一个单独的图层列表是有效的。 - Amy McBlane
1个回答

3
我回答自己的问题:
解决方法是对LayerDrawable调用mutate(),之后对其中任何一个Drawable的更改都不会影响使用同一资源的其他Drawable,这就是魔术!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接