2017-02-28 55 views
0

好日子全部,更改顏色如果這個drawable中的圖層

我試圖改變這個drawable中的顏色動態。

的可繪製的XML是:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item 
    android:id="@+id/status_colour_outer" 
    android:bottom="4dp" 
    android:left="4dp" 
    android:right="4dp" 
    android:top="4dp"> 
    <shape 
     android:shape="oval"> 
     <solid android:color="@color/red"/> 
    </shape> 
    </item> 
    <item android:id="@+id/status_colour_inner"> 
    <shape 
     android:shape="oval"> 
     <stroke 
     android:width="2dp" 
     android:color="@color/red"/> 
    </shape> 
    </item> 
</layer-list> 

我需要兩個層從一個web服務響應動態變化,以相同的顏色。

下面的代碼工作只,但只有改變

@ + ID/status_colour_inner

顏色,但不改變外尚未被引用層:

LayerDrawable layers = (LayerDrawable) ContextCompat.getDrawable(getContext(), R.drawable.status_colour); 
    GradientDrawable shape = (GradientDrawable) layers.findDrawableByLayerId(R.id.status_colour_inner); 
    GradientDrawable shape1 = (GradientDrawable) layers.findDrawableByLayerId(R.id.status_colour_outer); 
    shape.setColor(Color.parseColor(mColours.getDisplayClasses().get(position).getColour())); 
    shape1.setColor(Color.parseColor(mColours.getDisplayClasses().get(position).getColour())); 
    aView.setBackground(layers); 

mColours.getDisplayClasses()。get(position).getColour()

所有這樣做是返回,如「#B5FFC9」顏色的String

回答

0

嘗試使用活動context得到Drawable

LayerDrawable layers = (LayerDrawable) ContextCompat.getDrawable(YourActivity.this,R.drawable.your_shape) 
+0

它工作正常的一層,內層但是當我調用GradientDrawable shape1 =(GradientDrawable)layers.findDrawableByLayerId(R.id.status_colour_outer); 它不適用該顏色 – x10sion

+0

檢查[this](http://stackoverflow.com/questions/26561812/android-xml-layer-list-not-displayed-correctly-on-some-devices/26859663)永遠不要留下沒有顏色邊框的形狀,因爲有些設備會將它塗成黑色! – rafsanahmad007