view.setAlpha(float alpha)与view.getBackground().setAlpha(int alpha)的区别

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实例拥有同一个状态,如果你在一个地方改变了状态,其它的实例也会跟着改变。

参考链接:

https://blog.csdn.net/u010897392/article/details/53007031

http://blog.51cto.com/6169621/1618580

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值