Как установить оттенок vectorDrawable без изменения исходного рисунка? - PullRequest
0 голосов
/ 02 ноября 2018

Я пытаюсь использовать файл SVG в своем классе View, и проблема, с которой я сталкиваюсь, заключается в следующем: Когда я устанавливаю оттенок моего 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 голосов
/ 02 ноября 2018

Вам нужно вызвать метод drawable 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)
...