Изменить цвет прорисовываемого вектора с помощью градиента программно

Я уже нашел много ссылок и учебных пособий, но ни одна из них не сработала.

Мое требование заключается в том, что у меня есть один векторный файл для рисования в папке Drawable, и я использовал android:fillColor="@color/colorPrimary" для этого.

Теперь я хочу изменить цвет заливки линейным градиентом программно. Для этого я уже сделал код, но он не работает.

Код:

Векторный графический файл (asset_2.xml):

<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="464.48dp"
android:height="465.58dp"
android:viewportWidth="464.48"
android:viewportHeight="465.58">
<path
    android:fillColor="@color/colorPrimary"
    android:fillType="evenOdd"
    android:pathData="M457,301.81C410,412.47,243.29,499.56,132.63,452.54S-29.63,277.7,17.39,167,96.56-34.32,207.22,12.7,504,191.15,457,301.81Z" />
</vector>

Класс Java:

    AppCompatImageView img = (AppCompatImageView) findViewById(R.id.img);

    VectorDrawableCompat vectorDrawableCompat = VectorDrawableCompat.create(getResources(),R.drawable.asset_2,null);

    int colors[] = {R.color.colorAccent, R.color.red, R.color.green};

    GradientDrawable gradientDrawable = new GradientDrawable(
            GradientDrawable.Orientation.TOP_BOTTOM, colors);
    gradientDrawable.setGradientType(GradientDrawable.RING);

    for (int i = 0; i < colors.length; i++) {
        gradientDrawable.setColorFilter(colors[i], PorterDuff.Mode.MULTIPLY);
    }
    ColorFilter colorFilter = gradientDrawable.getColorFilter();
    vectorDrawableCompat.setColorFilter(colorFilter);
    img.setImageDrawable(vectorDrawableCompat);

В моем случае это не работает. Он показывает только один цвет вместо градиента с разными тремя цветами.

Расширенная помощь будет оценена!

0 ответов

Другие вопросы по тегам