在LayerDrawable中的Drawable中应用ColorFilter



我想在我的游戏中同时显示两辆不同颜色的汽车(假设是红色和蓝色),为了做到这一点,我使用了相同的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不同的每辆车,如插入另一层在车体的顶部,并乘以它或其他东西?

我回答我自己的问题:

解决方案是为LayerDrawable调用mutate(),之后在Drawable内部的任何更改都不会被重新分配到使用相同资源的另一个,这是神奇的!

相关内容

  • 没有找到相关文章

最新更新