2017-03-23 43 views
0

我有一個包含圖標的TabLayout。這個想法是改變顏色運行時間。 我有和xml可繪製文件的狀態:state_pressed,state_selected和默認使用相同的白色圖片,所以我可以稍後把顏色。 我拿不同狀態的繪圖:由setColorFilter設置的顏色在Prelollipop設備上消失

Drawable [] drawables = stateListDrawable.getConstantState();

和爲每一個可拉伸狀態我把顏色從另一個陣列:

可繪[I] .setColorFilter(顏色[I],PorterDuff.Mode.MULTIPLY);

問題是,顏色在開始時是可見的,但是當我開始點擊圖標時,所有圖標都會變成白色,並且我失去了色調。

一切正常按棒棒糖和以上工作。

+0

drawables [i] .setColorFilter(colors [i],PorterDuff.Mode.SRCATOP); –

+0

我試過了。同樣的結果。 :) –

回答

0

從V4支持庫使用着色方法

drawables[i] = DrawableCompat.wrap(drawables[i]) 
DrawableCompat.setTint(drawables[i], colors[i]) 
+0

我已經嘗試過。可能還有其他10件事。同樣的結果。 :) –

+0

其實我撒謊。我已經第二次嘗試了。這樣,顏色完全不會改變。圖標從一開始就是白色的。 –

0

我發現我的解決方案,這看起來不乾淨可言,但至少它的工作:)

我創建CustomStateListDrawable它從StateListDrawable擴展並添加了不同狀態的drawable。然後,我重寫了該類中的所有方法,以查看哪些方法被調用並嘗試更改那裏的顏色。被調用的時間足夠晚了(我的更改不會被覆蓋後)我的getState()。我還創建了一個ColorStateList對象來保存我的顏色,使代碼看起來就像這樣:

 private ColorStateList colorStateList; 


     public int[] getState() { 
       if (colorStateList != null) { 
        // Resolve the color for the current state 
        int color = colorStateList.getColorForState(super.getState(), 0); 
        // Get the current drawable and changed its color. 
        if (getCurrent() != null) { 
         getCurrent().setColorFilter(color, PorterDuff.Mode.MULTIPLY); 
        } 
       } 
       return super.getState(); 
      } 
每次

基本上當存在我得到的電流繪製並改變其顏色狀態的變化。