Android Gradient可编程绘制

mar*_*rfa 12 android background drawable

我有一个在xml中定义的渐变drawable,我将它用作背景,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
   <item android:bottom="4dp">
      <shape>
         <gradient
            android:startColor="@color/blue"
            android:endColor="@color/dark_blue"
            android:angle="270" />
      </shape>
   </item>
   <item android:top="98dp">
      <shape>
         <gradient
            android:startColor="@color/black"
            android:endColor="@color/transparent_black"
            android:angle="270" />
      </shape>
   </item>
</layer-list>
Run Code Online (Sandbox Code Playgroud)

我需要以编程方式实现它.我尝试使用GradientDrawable如下(此方法在自定义视图上实现):

int[] colors1 = {getResources().getColor(R.color.black), getResources().getColor(R.color.trasparent_black)};

GradientDrawable shadow = new GradientDrawable(Orientation.TOP_BOTTOM, colors1);
shadow.setBounds(0,98, 0, 0);

int[] colors = new int[2];
colors[0] = getResources().getColor(R.color.blue);
colors[1] = getResources().getColor(R.color.dark_blue);

GradientDrawable backColor = new GradientDrawable(Orientation.TOP_BOTTOM, colors);

backColor.setBounds(0, 0,0, 4);

//finally create a layer list and set them as background.    
Drawable[] layers = new Drawable[2];
layers[0] = backColor;
layers[1] = shadow;

LayerDrawable layerList = new LayerDrawable(layers);
setBackgroundDrawable(layerList);
Run Code Online (Sandbox Code Playgroud)

问题是,似乎设置边界是无用的或不起作用(android:top,android:bottom xml参数).得到的背景是从上到下绘制的每个层,一个在另一个之上.

我想生成这样的东西:IMG http://i49.tinypic.com/2nueqf.png

mar*_*rfa 9

找到了答案!可能重复的多梯度形状.

取代:

backColor.setBounds(0, 0,0, 4);
shadow.setBounds(0,98, 0, 0);
Run Code Online (Sandbox Code Playgroud)

对于

layerList.setLayerInset(0, 0, 0, 0, 4);
layerList.setLayerInset(1, 0, 98, 0, 0);     
Run Code Online (Sandbox Code Playgroud)