Drawable.mutate()
.
Несмотря на то, что каждый раз, когда вы загружаете Drawable
из ресурсов, вы получаете новый экземпляр, по соображениям производительности, все они разделяют ConstantState
. Этот ConstantState
обычно содержит все свойства, которые могут быть объявлены для Drawable
, его цвет в вашем примере.
Поэтому, если изменить цвет одного из Drawables
изменения получает отражение в его ConstantState
и изменение является видимым для всех других случаев, которые разделяют то же ConstantState
.
В документации Drawable.mutate()
состояний:
Сделать это вытяжка изменяемой. Эта операция не может быть отменена. Гарантируется, что изменчивый ресурс не будет делиться своим состоянием с любым другим ресурсом. Это особенно полезно, когда вам нужно изменить свойства загружаемых ресурсов из ресурсов. По умолчанию все экземпляры drawables, загруженные из одного ресурса, имеют общее состояние; если вы измените состояние одного экземпляра, все остальные экземпляры получат такую же модификацию.
Вы можете проверить это замечательно post by Romain Guy for more details.
Это работает, thx !! – tysheng