2014-09-01 5 views
3

У меня есть изображение, на котором я кладу цветную накладку, как это (цвета взяты из here):Установки градиента фона Programatically

макета/list_item_view.xml

<View 
    android:id="@+id/image_cover_gradient" 
    android:layout_width="fill_parent" 
    android:layout_height="80dip" 
    android:layout_alignParentTop="true" 
    android:layout_marginTop="70dp" 
    android:background="@drawable/gradient_blue"   
    /> 

вытяжка/gradient_blue.xml

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item> 
    <shape> 
     <gradient 
      android:angle="90" 
      android:startColor="@color/CornflowerBlue" 
      android:endColor="@color/Transparent" 
      android:type="linear" /> 
    </shape> 
</item> 
</selector> 

Это всегда ставит синий накладку (CornflowerBlue), и она работает, как ожидалось.

Теперь я пытаюсь сделать это программно и следовать некоторым ответам stackoverflow (например, this), но все равно не может заставить его работать. Вот мой код:

private void setColor(int color){ 
    View gradientCover = view.findViewById(R.id.image_cover_gradient); 
    // this FAILS because it's a StateListDrawable 
    //GradientDrawable coverGd = (GradientDrawable) gradientCover.getBackground(); 
    //coverGd.setColor(color); 

    //this doesn't seem to work either (I don't see any effect on the image) 
    GradientDrawable drawable = new GradientDrawable(
      Orientation.BOTTOM_TOP, new int[] { color, resources.getColor(R.color.Transparent) 
      }); 
    StateListDrawable sld = new StateListDrawable(); 
    sld.addState(new int[] { android.R.attr.startColor, android.R.attr.endColor}, drawable); 
    gradientCover.setBackground(sld); 
} 

Спасибо вам за помощь.

+1

избавиться от StateListDrawable, все, что вам нужно, это GradientDrawable – pskink

ответ

3

Как @pskink предложил - удаление StateListDrawable решил его:

GradientDrawable drawable = new GradientDrawable(
    Orientation.BOTTOM_TOP, new int[] { color, resources.getColor(R.color.Transparent) 
});  
gradientCover.setBackground(drawable); 
+0

и почему вы его размещения? – k0sh

Смежные вопросы