次のように、背景として使用するxmlで定義されたグラデーションドローアブルがあります。
<?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>
これをプログラムで実装する必要があります。私は次のように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);
問題は、境界の設定が役に立たないか、(Android:top、Android:bottom xmlパラメーター)と同じように機能しないように見えることです。結果として得られる背景は、各レイヤーが上から下に上下にペイントされます。
答えが見つかりました!。重複の可能性 マルチグラデーション形状 。
交換済み:
backColor.setBounds(0, 0,0, 4);
shadow.setBounds(0,98, 0, 0);
for
layerList.setLayerInset(0, 0, 0, 0, 4);
layerList.setLayerInset(1, 0, 98, 0, 0);