Android изменить нарисованный сплошной цвет программно - PullRequest
0 голосов
/ 17 октября 2019

Я нарисовал овальную форму с галочкой внутри. Можно ли программно изменить овальный цвет, не изменяя цвет галочки?

Вот мой чертеж:

<item>
    <shape
        android:shape="oval">
        <solid android:color="@color/black" />
    </shape>
</item>
<item>
    <bitmap
        android:src="@drawable/check_mark"/>
</item>

Я хотел бы только изменить твердый черный цвет на что-тоостальное программно

Ответы [ 3 ]

0 голосов
/ 17 октября 2019

Вы можете грамматически создать фигуру, используя приведенный ниже ссылочный код.

GradientDrawable shape = new GradientDrawable();
shape.setCornerRadius(24);
shape.setShape(GradientDrawable.OVAL);
shape.setColor(R.color.red);
imageView.setBackground(shape);
0 голосов
/ 17 октября 2019

Drawable является овалом и является фоном ImageView

Получить Drawable из imageView с помощью getBackground ():

Drawable background = imageView.getBackground();

Проверка на обычных подозреваемых:

if (background instanceof ShapeDrawable) {
    // cast to 'ShapeDrawable'
    ShapeDrawable shapeDrawable = (ShapeDrawable) background;
    shapeDrawable.getPaint().setColor(ContextCompat.getColor(mContext,R.color.colorToSet));
} else if (background instanceof GradientDrawable) {
    // cast to 'GradientDrawable'
    GradientDrawable gradientDrawable = (GradientDrawable) background;
    gradientDrawable.setColor(ContextCompat.getColor(mContext,R.color.colorToSet));
} else if (background instanceof ColorDrawable) {
    // alpha value may need to be set again after this call
    ColorDrawable colorDrawable = (ColorDrawable) background;
    colorDrawable.setColor(ContextCompat.getColor(mContext,R.color.colorToSet));
}

Компактная версия:

Drawable background = imageView.getBackground();
if (background instanceof ShapeDrawable) {
    ((ShapeDrawable)background).getPaint().setColor(ContextCompat.getColor(mContext,R.color.colorToSet));
} else if (background instanceof GradientDrawable) {
    ((GradientDrawable)background).setColor(ContextCompat.getColor(mContext,R.color.colorToSet));
} else if (background instanceof ColorDrawable) {
    ((ColorDrawable)background).setColor(ContextCompat.getColor(mContext,R.color.colorToSet));
}
0 голосов
/ 17 октября 2019

Было бы проще просто добавить второй чертежный объект с другим "овальным" цветом и затем заменить чертежный программно.

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