Изменить цвет прорисовываемого вектора с помощью градиента программно
Я уже нашел много ссылок и учебных пособий, но ни одна из них не сработала.
Мое требование заключается в том, что у меня есть один векторный файл для рисования в папке 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);
В моем случае это не работает. Он показывает только один цвет вместо градиента с разными тремя цветами.
Расширенная помощь будет оценена!