- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图在我的 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 的情况下在代码中执行此操作?
最佳答案
您需要调用 drawable mutate()
方法。来自documentation :
Make this drawable mutable. This operation cannot be reversed. A mutable drawable is guaranteed to not share its state with any other drawable. This is especially useful when you need to modify properties of drawables loaded from resources. By default, all drawables instances loaded from the same resource share a common state; if you modify the state of one instance, all the other instances will receive the same modification. Calling this method on a mutable Drawable will have no effect.
因为你想给你的drawable着色,你还需要使用DrawableCompat.wrap(drawable)
。这将允许:
Potentially wrap {@code drawable} so that it may be used for tinting across the different API levels, via the tinting methods in this class.
将此应用于您的代码:
var drawable = AppCompatResources.getDrawable(context, R.drawable.icon)
drawable = drawable.mutate();
drawable = DrawableCompat.wrap(drawable);
DrawableCompat.setTint(drawable , Color.RED)
drawable.draw(canvas)
关于android - 如何在不修改原始可绘制对象的情况下设置 vectorDrawable 的色调?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53117470/
我是一名优秀的程序员,十分优秀!