动态设置背景引发的问题记录

在做一个点击左侧眼睛播弹窗播放的需求时。动态设置背景引发的问题记录
想了一个简单点的方案实现,就是在布局中加一个View。让该view布局位置动态设置为该眼睛旁边。实现就是点击小眼睛,弹出布局。显示。考虑到只弹出一个小View播放(没有设置把右边全覆盖)其他按钮全部都显示出来,不是特别好。于是加了一个作为背景的View设置为半透明阴影那种。再把播放的view放在背景板上。于是在代码中通过view.getBackground().setAlpha(30)。效果确实达到了,但是后来发现一个BUG。就是我点击其他按钮时候。居然把目前图片中纯黑的底板弄成了我设置的那个透明的颜色。查了半天最后才知道需要用view.getBackground().mutate().setAlpha(30);就不会有这种问题
参考的博文如下。
原博文

简单了解后明白了。因为我新加的背景板我设置了一个初始的颜色为黑色。无论你用android:background="@color/black"还是
android:background="#000000"。在你这个当前布局中别的控件可能也用到了这个颜色,所以这些控件都会共享一个drawable(你获取资源实际R.ID.XXX)所以你更改一个,其他相对应的的资源也会受到改变。就导致了出现上述情况,使用
Drawable.mutate()使drawable变得状态不稳定,不稳定的drawable不会与其他共用。当你去改他的属性就不会影响到其他地方了。另外view.setAlpha(0.0f)这种设置的是当前view以及view中的子view。