Изменить цвет фигуры, нарисованной программно

Мне нужно изменить цвет фигуры прорисовывается программно...

я использую это

<shape xmlns:android="http://schemas.android.com/apk/res/android" >
    <solid android:color="@color/app_theme_blue" />
    <corners android:radius="8dp" />
    <padding
        android:bottom="10dp"
        android:left="10dp"
        android:right="10dp"
        android:top="10dp" />
</shape>

Здесь я должен изменить цвет android:color="@color/app_theme_blue", Помогите мне, пожалуйста.

1 ответ

Решение

Да, ты можешь. И это действительно супер просто.

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

Drawable drw = mContext.getResources().getDrawable(R.id.baseDrawable);

Эта строка просто получает Drawable из ресурсов (baseDrawable - назовите его как хотите).

Далее мы будем использовать перегрузку метода setColorFilter(), которая принимает два параметра: нужный нам цвет и режим наложения.

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

drw.mutate().setColorFilter(finalColor, PorterDuff.Mode.MULTIPLY);

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

Между прочим, нет никаких требований уровня API, это работает с уровня API 1.

PS:

Это необходимый импорт:

import android.content.Context;
import android.graphics.PorterDuff;
import android.graphics.drawable.Drawable;
Другие вопросы по тегам