如何在不修改原始drawable的情况下设置vectorDrawable的色调?

时间:2018-11-02 11:09:54

标签: android svg android-vectordrawable

我正在尝试在View类中使用SVG文件,而遇到的问题是: 当我像这样设置VectorDrawable的色调颜色时:

var d = AppCompatResources.getDrawable(context, R.drawable.icon)
var vDraw = VectorDrawable()
vDraw  = d as VectorDrawable
DrawableCompat.setTint(vDraw , Color.RED)
vDraw.draw(canvas)

我最终将修改原始可绘制对象。有没有一种方法可以在我的代码中完成而无需修改原始的SVG?

1 个答案:

答案 0 :(得分:0)

您需要调用可绘制的mutate()方法。来自documentation

  

使此可绘制可变。此操作不能撤消。一种   可变的drawable保证不会与其他任何共享状态   可绘制的。当您需要修改属性时,这特别有用   从资源加载的可绘制图形。默认情况下,所有可绘制对象   从相同资源加载的实例具有相同的状态;如果你   修改一个实例的状态,其他所有实例将收到   相同的修改。在可变的Drawable上调用此方法   没有效果。

并且由于要着色可绘制对象,因此还需要使用DrawableCompat.wrap(drawable)。这将允许:

  

可能包装{@code drawable},以便将其用于着色   跨不同的API级别,通过此方法中的着色方法   课。

将此应用于您的代码:

var drawable = AppCompatResources.getDrawable(context, R.drawable.icon)
drawable = drawable.mutate();
drawable = DrawableCompat.wrap(drawable);
DrawableCompat.setTint(drawable , Color.RED)
drawable.draw(canvas)