以编程方式创建的GradientDrawable:setSize和setGradientCenter方法不起作用

时间:2017-02-16 10:40:57

标签: android toolbar gradient gradientdrawable

我正在尝试为我的工具栏设置渐变,但似乎setSize和setGradientCenter不起作用。

我需要动态创建它,因为渐变的中心和高度取决于我从CMS获得的值,但我无法使其工作。无论我为大小和中心设置了什么值,渐变总是得到整个工具栏的大小,中心是默认值。

我首先尝试调用mutate(),因为文档说没有结果。还尝试了具有相同结果的setBounds

GradientDrawable gradientDrawable = new GradientDrawable();
        gradientDrawable.setOrientation(gradientData.getOrientation());
        gradientDrawable.setColors(gradientData.getColors());
        gradientDrawable.setGradientCenter(gradientData.getCenterX(), gradientData.getCenterY());

toolbar.setBackground(gradientDrawable);

我错过了什么吗?如果重要,方向总是线性的

1 个答案:

答案 0 :(得分:3)

我会留下代码,以防其他人使用。

感谢@pskink示例,它使用ScaleDrawable。现在我可以在工具栏中设置一个较小的渐变:

int[] colors = {
        Color.RED, Color.YELLOW, Color.RED
};

Drawable gd = new GradientDrawable(GradientDrawable.Orientation.TOP_BOTTOM, colors);
final Drawable sd = new ScaleDrawable(gd, Gravity.TOP, 0, 1);
sd.setLevel(7500);

toolbar.setBackground(sd);