Android getBackground().setAlpha遇到问题解决办法
程序员文章站
2022-06-14 09:29:46
android getbackground().setalpha遇到问题解决办法
前言:
使用getbackground().setalpha,导致其他布局背景透明度都...
android getbackground().setalpha遇到问题解决办法
前言:
使用getbackground().setalpha,导致其他布局背景透明度都改变的问题
从晚上9点就开始琢磨,为什么我在一个地方设置了getbackground().setalpha(0);在别的activity中有些控件也变成透明的了,让我百思不得其解,哦,现在是晚上十一点四十五,问题终于解决(解决不了睡不着觉啊),觉得挺有意思的,分享一下,先举个例子:
<?xml version="1.0" encoding="utf-8"?> <linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" > <textview android:id="@+id/text1" android:layout_width="match_parent" android:layout_height="60dp" android:background="@color/text_orange" /> <textview android:id="@+id/text2" android:layout_width="match_parent" android:layout_height="60dp" android:background="@color/text_orange" /> </linearlayout>
两个textview,background都指向相同的资源,那如果text1.getbackground().setalpha(255)(不透明),那text2的背景是不是也跟着变成不透明的呢,答案是yes,那为什么呢:默认情况下,所有的从同一资源(r.drawable.***等等)加载的实例都共享一个共用的状态,如果你更改一个实例的状态,其余的实例都会接收到相同的通知。
那怎么解决这种情况呢,看看这个方法:
/** * make this drawable mutable. this operation cannot be reversed. a mutable * drawable is guaranteed to not share its state with any other drawable. * this is especially useful when you need to modify properties of drawables * loaded from resources. by default, all drawables instances loaded from * the same resource share a common state; if you modify the state of one * instance, all the other instances will receive the same modification. * * calling this method on a mutable drawable will have no effect. * * @return this drawable. * @see constantstate * @see #getconstantstate() */ public drawable mutate() { return this; }
翻译一下注释吧:让这个drawable可变,这个操作是不可逆的。一个可变drawable可以保证不与其它的drawable分享一个状态。当你需要修改资源中的drawable的属性时这个方法是非常有用的,因为默认情况下加载相同资源的所有drawable实例拥有同一个状态,如果你在一个地方改变了状态,其它的实例也会跟着改变。
ok。所以
text1.getbackground().mutate().setalpha(255);
问题解决了!
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!