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()
吃一见长一智

猜你喜欢

转载自blog.csdn.net/u012881042/article/details/79409563