2017-02-16 111 views
0

我想设置一个渐变到我的工具栏,但它看起来像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); 

我错过了什么吗?方向始终是线性的(如果有的话)

+0

使用'ClipDrawable'如果你想要的是剪辑另一个可绘制使它更广泛/短取决于当前水平 – pskink

+0

@pskink我不想将它夹,因为如果我这样做,我不会有整个渐变。例如,如果我有一个结束颜色,我甚至不会看到它,如果我剪辑它。我只是希望渐变变得更短,或者修改中心以便渐变效果更快结束 – moyo

+0

所以使用'ScaleDrawable':* Drawable根据其当前级别值* – pskink

回答

1

我会在这里留下代码,以防万一它对其他人有用。

感谢@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);