Android getBackground().setAlpha遇到問題解決辦法
Android getBackground().setAlpha遇到問題解決辦法
前言:
使用getBackground().setAlpha,導(dǎo)致其他布局背景透明度都改變的問題
從晚上9點就開始琢磨,為什么我在一個地方設(shè)置了getBackground().setAlpha(0);在別的activity中有些控件也變成透明的了,讓我百思不得其解,哦,現(xiàn)在是晚上十一點四十五,問題終于解決(解決不了睡不著覺?。?,覺得挺有意思的,分享一下,先舉個例子:
<?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èn)情況下,所有的從同一資源(R.drawable.***等等)加載的實例都共享一個共用的狀態(tài),如果你更改一個實例的狀態(tài),其余的實例都會接收到相同的通知。
那怎么解決這種情況呢,看看這個方法:
/** * 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分享一個狀態(tài)。當(dāng)你需要修改資源中的Drawable的屬性時這個方法是非常有用的,因為默認(rèn)情況下加載相同資源的所有Drawable實例擁有同一個狀態(tài),如果你在一個地方改變了狀態(tài),其它的實例也會跟著改變。
OK。所以
text1.getBackground().mutate().setAlpha(255);
問題解決了!
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關(guān)文章
Android自定義ActionProvider ToolBar實現(xiàn)Menu小紅點
這篇文章主要介紹了Android自定義ActionProvider ToolBar實現(xiàn)Menu小紅點,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-09-09android 檢查網(wǎng)絡(luò)連接狀態(tài)實現(xiàn)步驟
android 如何檢查網(wǎng)絡(luò)連接狀態(tài),是android開發(fā)中一個常見的問題,本文將介紹如何實現(xiàn),需要的朋友可以參考下2012-12-12Android判斷當(dāng)前應(yīng)用程序處于前臺還是后臺的兩種方法
這篇文章主要介紹了Android判斷當(dāng)前應(yīng)用程序處于前臺還是后臺的兩種方法,有需要的朋友可以參考一下2013-12-12Android 中出現(xiàn)java.net.BindException: bind failed: EADDRINUSE 問
這篇文章主要介紹了Android 中出現(xiàn)java.net.BindException: bind failed: EADDRINUSE 問題解決辦法的相關(guān)資料,需要的朋友可以參考下2017-04-04當(dāng)ListView有Header時 onItemClick里的position不正確的原因
這篇文章主要介紹了當(dāng)ListView有Header時 onItemClick里的position不正確的原因的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-07-07詳解Android Scroller與computeScroll的調(diào)用機(jī)制關(guān)系
這篇文章主要介紹了詳解Android Scroller與computeScroll的調(diào)用機(jī)制關(guān)系的相關(guān)資料,需要的朋友可以參考下2016-01-01