pix*_*rld 3 svg android 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)
Run Code Online (Sandbox Code Playgroud)
我最终要修改原始的可绘制对象。有没有一种方法可以在不修改原始 SVG 的情况下在代码中做到这一点?
您需要调用可绘制mutate()方法。从文档中:
使这个可绘制对象可变。此操作无法逆转。保证可变可绘制对象不会与任何其他可绘制对象共享其状态。当您需要修改从资源加载的可绘制对象的属性时,这特别有用。默认情况下,从同一资源加载的所有可绘制对象实例共享一个公共状态;如果修改一个实例的状态,所有其他实例都会收到相同的修改。在可变的 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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1400 次 |
| 最近记录: |