我正在尝试在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?
答案 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)