2017-03-23 3 views
0

アイコンを持つTabLayoutがあります。アイデアは色のランタイムを変更することです。 私はstateとstate_selectedとxmlのdrawableファイルを持っています。デフォルトは同じ白い画像ですので、色を後で置くことができます。 私はさまざまな州のためのdrawableを取る:setColorFilterで設定された色は、前回のポラロイドデバイスで消えます。

Drawable [] drawables = stateListDrawable.getConstantState();

、私は別の配列から色を置くすべての描画可能状態について:

描画可能[I] .setColorFilter(色[I]、PorterDuff.Mode.MULTIPLY)。

問題は、色が最初に表示されているが、私は、アイコンの上にすべてのアイコンをクリックして起動したときに再び白くなると私は色合いを失うということです。

ロリポップ以上のものはすべて正常に機能しています。

+0

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

+0

私はそれを試みました。同じ結果。 :) –

答えて

0

私は全然きれいに見えませんが、少なくともそれは:)

を働いている私の解決策を発見した私はCustomStateListDrawableを作成している

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

私はそれを試みました。おそらく10の他のもの。同じ結果。 :) –

+0

実際に私は嘘をついた。私はそれをもう一度試してみた。この方法では、色はまったく変更されません。アイコンは最初から白です。 –

0

v4のサポートライブラリから色合いメソッドを使用しますStateListDrawableから拡張され、さまざまな状態のドロアブルが追加されています。次に、クラス内のすべてのメソッドをオーバーライドして、どのクラスが呼び出されているかを調べ、色を変更しようとしました。十分に遅く呼ばれた(私の変更は、私がそれらを作った後に上書きされない)getState()でした。基本的には

 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(); 
      } 

たびに、私は現在の描画可能を取得し、その色を変更する状態の変更がある場合:私は、コードは次のようになりますので、自分の色を保持するためにもColorStateListオブジェクトを作成しました。

関連する問題