view.getBackground().setAlpha() 设置透明度影响其他页面状态问题

/**
 * 设置View的背景透明度
 *
 * @param view
 * @param alpha
 */
public void setViewBackgroundAlpha(View view, int alpha) {
    if (view == null) return;

    Drawable drawable = view.getBackground();
    if (drawable != null) {
        drawable.setAlpha(alpha);
    }
}

 

问题:当设置view背景透明度时时,会对其他页面颜色状态影响 

解决:将上边的方法改为下边方法   # mutate()

 

如果有多个控件同时使用某一个图片资源,并且要改变该资源的状态时就需要用mutate方法。使用mutate是为了更改一个资源的状态时,其余引用该资源的控件不会也更改状态。 默认情况下,所有的从同一资源(R.drawable.***)加载的drawable实例都共享一个共用的状态,如果你更改一个实例的状态,其余的实例都会接收到相同的通知。使用mutate可以使该drawable状态不定。一个不定状态的drawable不会共享状态。

 

/**
 * 设置View的背景透明度
 *
 * @param view
 * @param alpha
 */
public void setViewBackgroundAlpha(View view, int alpha) {
    if (view == null) return;

    Drawable drawable = view.getBackground();
    if (drawable != null) {
        drawable.mutate().setAlpha(alpha);
    }
}

你可能感兴趣的:(【Android常见问题】)