本文主要是介绍Android 设置透明度遇到的坑,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
在一个项目中,遇到,某个界面明明设置了白色的背景颜色,但经常白色背景颜色变透明,显示底层的灰色背景颜色,经过一系列的排查,发现是同事在写主布局的时候,设置透明度代码不合理导致的。
在修改之前是:
mLlTab.getBackground().setAlpha((int) ((radio * 2 - 1) * 255));
修改之后是:
mLlTab.getBackground().mutate().setAlpha((int) ((radio * 2 - 1) * 255));
为何会出现这个问题:
首先,view.getBackground()
获得的是一个 ColorDrawable,然后给这个 ColorDrawable 设置 Alpha 值的话,会影响所有设置 background 为这个颜色的背景色的 Alpha 值。
Drawable mutate ()
让一个 Drawable 变为 mutable 的。这个操作是不可逆的。一个 mutable 的 drawable 可以保证不会分享自己的状态给其他 drawable。当一个 drawable 是从 resource 加载的,在需要更改它状态时这个方法特别有用。在默认情况下,所有从相同 resource 的 drawable 的实例是共享一个通用状态的;如果你修改了其中一个的状态,所有其他的实例也会收到相同的改动。在一个已经是可变的 drawable 上调用该方法没有效果。
所以设置背景透明度时,请要加上
mutate()
吃一见长一智
这篇关于Android 设置透明度遇到的坑的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!