再日常开发中,经常会遇到scrollview滑动,改变状态栏颜色的需求。一般做法都是监听滑动距离,动态改变view的透明度。这是一般常用操作。
那么问题来了,两个activity都是这种需求,而且所使用的透明背景颜色一样。再A页面设置了背景颜色之后,进入B页面,没有滑动,但是B页面已经改变了背景颜色值.....(蜜汁背景)
问题解决
- 修改之前:
tv_title.getBackground().setAlpha(100); - 修改之后:
tv_title.getBackground().mutate().setAlpha(100);
简述
可以看到,这里的修改之后多了一个方法mutate();当view.getBackground()获得的是一个ColorDrawable,然后给这个ColorDrawable设置Alpha值的话,会影响所有设置backgound为这个颜色的背景色的alpha(共用了这个alpha)。
mutate解释:
引用官方话语:
Make this drawable mutate,This operation cannot be reversed.A mutable darwable is guaranteed to not share its state with any other drawable.
所以设置背景透明色的时候,加上 mutate方法