Invalidate GradientDrawable - PullRequest
       9

Invalidate GradientDrawable

0 голосов
/ 06 сентября 2018

У меня есть следующий xml:

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval">

    <solid android:color="@color/color_primary_dark" />
    <size android:width="25dp" android:height="25dp" />
    <stroke android:width="1dp" android:color="@android:color/white" />

</shape>

И в какой-то момент в моем приложении я меняю цвет этой формы следующим образом:

// priority_button has this shape as is src
(priority_button.drawable as GradientDrawable).setColor(ContextCompat.getColor(this, android.R.color.holo_orange_light))

Проблема в том, что если я уничтожу действие и затем снова открою то же самое действие, эта форма останется с последним заданным мной цветом (в данном случае android.R.color.holo_orange_light), и я хочу сбросить эту форму к тому же цвету, который определен в xml (R.color.color_primary_dark).

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

Есть ли способ сбросить значения xml или что-то вроде этого?

1 Ответ

0 голосов
/ 07 сентября 2018

Попробуйте вызвать mutate() на drawable перед изменением его цвета.

В соответствии с setColor (int argb) документация гласит, что:

изменение цвета повлияет на все экземпляры рисунка, загруженного из ресурса. Рекомендуется вызывать mutate () перед изменением цвета.

Так что, возможно, это касается и вас.

...