2017-06-02 45 views
0

我正在改變drawable的顏色,然後將其設置爲textview的可繪製左側,但我正在觀察一件奇怪的事情。 只有在將drawable設置爲textview之前將其設置爲其他圖像視圖時,可繪製的左側才起作用。setCompoundDrawables只能在drawable設置爲另一個imageview時才起作用?

Drawable mDrawable = this.getResources().getDrawable(R.drawable.legendc); 
        mDrawable.setColorFilter(colorsActive[0], PorterDuff.Mode.SRC_IN); 
        mImageview.setImageDrawable(mDrawable); 

        mtextview.setCompoundDrawables(mDrawable, null, null, null); 

如果我刪除mImageview.setImageDrawable(mDrawable); 然後setCompoundDrawables不起作用,並且不能繪製左邊的應用。 這是怎麼發生的?

回答

2

單獨使用setCompoundDrawables()無法正常工作的原因可能與Android中的圖像呈現和創建引用有關。每個Drawable變量中都有一個參數,稱爲mCallback。當你想跳過設置ImageView它的值爲空,否則它有一個WeakReference變量 - 這意味着像應用程序會說「看,引用是綁定在內存中的某個地方,現在我可以使用它!」看起來像setImageDrawable()方法創建此綁定,而setCompoundDrawables()沒有。

我不是專家本主題中,什麼我發現僅僅是一個解決辦法(也許你會需要一個ImageLoader般的對象來處理這一點),但看起來像使用mtextview.setCompoundDrawablesWithIntrinsicBounds()效果很好。

//mImageview.setImageDrawable(mDrawable); You can delete this line 

//Using this will not require to load your Drawable somewhere else 
mtextview.setCompoundDrawablesWithIntrinsicBounds(mDrawable, null, null, null); 
相關問題