如果有多个控件同时使用某一个图片资源,并且要改变该资源的状态时就需要用mutate方法。使用mutate是为了更改一个资源的状态时,其余引用该资源的控件不会也更改状态。
默认情况下,所有的从同一资源(R.drawable.***)加载的drawable实例都共享一个共用的状态,如果你更改一个实例的状态,其余的实例都会接收到相同的通知。使用mutate可以使该drawable状态不定。一个不定状态的drawable不会共享状态。
Drawable bkDrawable = this.getBackground().mutate();
if (null != bkDrawable)
{
if (enable)
{
bkDrawable.clearColorFilter();
}
else
{
//通过setColorFilter来改变drawable的状态,如果不用mutate,其余引用了该背景
的资源也会被设置这个ColorFilter
bkDrawable.setColorFilter(m_disableColor, PorterDuff.Mode.DST_OUT);
}
this.setBackgroundDrawable(bkDrawable);
}
this.getBackground().mutate()的mutate方法
原文地址:http://6169621.blog.51cto.com/6159621/1618580