Android中对一个View控件透明度的设置,提供了两个方法:view.setAlpha(float alpha)与view.getBackground().setAlpha(int alpha)这两者的区别主要是:
传递参数:
view.setAlpha(float alpha)参数范围是0~1;而view.getBackground().setAlpha(int alpha)传入的是0~255的整型数字(最终他们都会转化为16进制透明度,前者会先将参数alpha*255转化为int类型)
达到的效果:
view.setAlpha(float alpha)是对整个view的透明度(包括它的子view)进行设置,setAlpha(0)时view和其子view就会消失。
view.getBackground().setAlpha(int alpha)是对背景透明度进行设置,view.getBackground().setAlpha(0)是背景全透明,其子view并不会收到影响。
注意事项:
在使用view.getBackground().setAlpha(int alpha)给透明值是会使得同色直的其他界面受到影响。解决方案如下
view.getBackground().mutate().setAlpha(int alpha) 只需要在getBackground的后面加上.mutate()即可解决。
至于为什么加上mutate()就可以解决的原因在于:默认情况下,所有的从同一资源(R.drawable.xxxx等等)加载的实例都是一个共用的状态,如果改变一个实例状态,其余的实例都会收到通知,改变其状态。而mutate()方法的作用就在于获取的drawable实例变为单独的,让这个drawable可变,这个操作是不可逆的。一个可变Drawable可以保证不与其它的Drawable分享一个状态。当你需要修改资源中的Drawable的属性时这个方法是非常有用的,因为默认情况下加载相同资源的所有Drawable实例拥有同一个状态,如果你在一个地方改变了状态,其它的实例也会跟着改变。
参考链接: