Как изменить цвет Drawable? - PullRequest
       58

Как изменить цвет Drawable?

0 голосов
/ 13 апреля 2020

В коде, который я звоню diamond.xml с этой строкой:

private final Drawable diamond = context.getResources().getDrawable(R.drawable.diamond);

Я рисую это с помощью этого кода:

diamond.setBounds(0, 0, 10, 10);
diamond.draw(canvas);

В некоторых случаях мне нужно нарисовать это просто меняя один или оба из android:fillColor. Является ли это возможным? Я хотел бы избежать создания N копий diamond.xml со всеми комбинациями цветов.

diamond. xml

<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
        android:height="100dp" android:width="70dp"
    android:viewportHeight="100" android:viewportWidth="100">

    <path
        android:fillColor="#FF5722"
        android:pathData="M 5,5 95,5 95,95 5,95 z"
        android:strokeAlpha="1"
        android:strokeColor="#FFFFFF"
        android:strokeLineCap="butt"
        android:strokeLineJoin="round"
        android:strokeWidth="4"/>

    <path
        android:fillColor="#8BC34A"
        android:pathData="m 50,30 l 20,20 -20,20 -20,-20 z"
        android:strokeAlpha="1"
        android:strokeColor="#FFFFFF"
        android:strokeLineCap="butt"
        android:strokeLineJoin="round"
        android:strokeWidth="4"/>

</vector>

Ответы [ 2 ]

0 голосов
/ 13 апреля 2020

Создайте темы и установите цвета внутри него,

<style name="UpdatedScene" parent="DefaultScene">
<item name="diamond_red">#red_color_hex</item>
</style>

, а затем создайте рисование с этой темой,

final ContextThemeWrapper wrapper = new ContextThemeWrapper(this,R.style.DefaultScene);
final Drawable drawable = ResourcesCompat.getDrawable(getResources(),R.drawable.diamond, wrapper.getTheme());
imageView.setImageDrawable(drawable);

Сцена по умолчанию будет вашим цветом по умолчанию для рисования. при смене цвета установите другую тему.

0 голосов
/ 13 апреля 2020

не используйте android: fillColor для изменения значения. Вы можете использовать android: tint = "YOUR_COLOR"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...