以编程方式创建的GradientDrawable:setSize和setGradientCenter方法不起作用
问题描述:
我想设置一个渐变到我的工具栏,但它看起来像setSize和setGradientCenter不起作用。以编程方式创建的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);
我错过了什么吗?方向始终是线性的(如果有的话)
答
我会在这里留下代码,以防万一它对其他人有用。
感谢@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);
使用'ClipDrawable'如果你想要的是剪辑另一个可绘制使它更广泛/短取决于当前水平 – pskink
@pskink我不想将它夹,因为如果我这样做,我不会有整个渐变。例如,如果我有一个结束颜色,我甚至不会看到它,如果我剪辑它。我只是希望渐变变得更短,或者修改中心以便渐变效果更快结束 – moyo
所以使用'ScaleDrawable':* Drawable根据其当前级别值* – pskink