Drawable共享狀態(tài)問題

結(jié)論:android中從同一個(gè)資源文件中加載出來的drawable會(huì)共享狀態(tài)瘟芝,如果有加載出來多個(gè)drawable的實(shí)例對(duì)象琐簇,當(dāng)改變了其中一個(gè)的狀態(tài)時(shí),其他drawable的狀態(tài)也會(huì)相應(yīng)改變究西。

實(shí)例:在修改一個(gè)view卦碾,或者它的background,即時(shí)是新創(chuàng)建的view對(duì)象渤早,如果它是從同一個(gè)xml中加載出來的(包括矢量圖职车、shape等),在代碼中動(dòng)態(tài)修改的它顏色鹊杖,會(huì)影響到其他從該xml加載出的view悴灵。這是因?yàn)樗膍GradientState是被復(fù)用的。

下面兩個(gè)圖骂蓖,是從同一個(gè)xml中加載的view對(duì)象(在recyclerView的兩個(gè)item中)积瞒,在動(dòng)態(tài)改變了第二個(gè)view的background顏色后,如果第一個(gè)view所在的item重新bind登下,新創(chuàng)建出的view茫孔,也表現(xiàn)出和原來第二個(gè)view同樣的背景顏色。修改顏色的方法如下:

private fun changeBackgroundColor(@ColorInt argb: Int?) {
        argb?.let {
            if (mRootView?.background is GradientDrawable) {
                val grad: GradientDrawable = mRootView?.background as GradientDrawable
                grad.setColor(argb)
            }
        }
    }
View-1的background

--

View-2的background

可以看到庐船,這個(gè)兩個(gè)view的background對(duì)象银酬,確實(shí)是兩個(gè)不同的對(duì)象,但是他們的mGradientState筐钟,是同一個(gè)GradientState對(duì)象揩瞪,這里發(fā)生了復(fù)用。

所以篓冲,在動(dòng)態(tài)修改drawable的顏色(或者GradientState中其他屬性)時(shí)李破,需要將改該drawable設(shè)置為mutate狀態(tài),即調(diào)用mutate()方法壹将,該方法會(huì)為drawable創(chuàng)建新的mGradientState(Drawable的各派生類實(shí)現(xiàn)有所不同)嗤攻。舉例如下:GradientDrawable.mutate()方法如下:


GradientDrawable.mutate()

所以需要將上述修改背景顏色的方法,修改如下:

    private fun changeBackgroundColor(@ColorInt argb: Int?) {
        argb?.let {
            if (mRootView?.background is GradientDrawable) {
                val grad: GradientDrawable = (mRootView?.background as GradientDrawable).mutate() as GradientDrawable
                grad.setColor(argb)
            }
        }
    }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末诽俯,一起剝皮案震驚了整個(gè)濱河市妇菱,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖闯团,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件辛臊,死亡現(xiàn)場離奇詭異,居然都是意外死亡房交,警方通過查閱死者的電腦和手機(jī)彻舰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來候味,“玉大人刃唤,你說我怎么就攤上這事“兹海” “怎么了尚胞?”我有些...
    開封第一講書人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長帜慢。 經(jīng)常有香客問我辐真,道長,這世上最難降的妖魔是什么崖堤? 我笑而不...
    開封第一講書人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任侍咱,我火速辦了婚禮,結(jié)果婚禮上密幔,老公的妹妹穿的比我還像新娘楔脯。我一直安慰自己,他們只是感情好胯甩,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開白布昧廷。 她就那樣靜靜地躺著,像睡著了一般偎箫。 火紅的嫁衣襯著肌膚如雪木柬。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,554評(píng)論 1 305
  • 那天淹办,我揣著相機(jī)與錄音眉枕,去河邊找鬼。 笑死怜森,一個(gè)胖子當(dāng)著我的面吹牛速挑,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播副硅,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼姥宝,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了恐疲?” 一聲冷哼從身側(cè)響起腊满,我...
    開封第一講書人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤套么,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后碳蛋,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體违诗,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年疮蹦,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片茸炒。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡愕乎,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出壁公,到底是詐尸還是另有隱情感论,我是刑警寧澤,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布紊册,位于F島的核電站比肄,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏囊陡。R本人自食惡果不足惜芳绩,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望撞反。 院中可真熱鬧妥色,春花似錦、人聲如沸遏片。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽吮便。三九已至笔呀,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間髓需,已是汗流浹背许师。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留僚匆,地道東北人枯跑。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像白热,于是被迫代替她去往敵國和親敛助。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • ¥開啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個(gè)線程屋确,因...
    小菜c閱讀 6,419評(píng)論 0 17
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,101評(píng)論 1 32
  • 前段時(shí)間一直整理java方面的知識(shí)了纳击,先過渡一段時(shí)間到android上面來续扔,后期還是會(huì)整理java相關(guān)的東西,至于...
    的一幕閱讀 2,880評(píng)論 0 21
  • 1焕数、Drawable 簡介 Drawable——可簡單理解為可繪制物纱昧,表示一些可以繪制在 Canvas 上的對(duì)象。...
    牧秦丶閱讀 14,815評(píng)論 0 15
  • 概述 Android把任何可繪制在屏幕上的圖形圖像都稱為drawable 資源,你可以通過類似getDrawabl...
    小蕓論閱讀 2,720評(píng)論 2 5