为什么LinearGradient构造函数的这个参数似乎不起作用?

时间:2016-03-13 19:03:43

标签: android android-drawable linear-gradients android-shapedrawable

我想设置一个带有线性渐变的自定义drawable作为我SeekBar中条形的背景drawable。我在下面的代码片段中的第二个语句中创建了LinearGradient,并且这样做:

// Creating the drawable:
ShapeDrawable shapeDrawable = new ShapeDrawable(new RectShape());
Shader linearGradientShader = new LinearGradient(0, 0, 300, 20, new int[] { Color.RED, Color.BLUE },
new float[] { 0, 1 }, Shader.TileMode.CLAMP);
shapeDrawable.getPaint().setShader(linearGradientShader);
shapeDrawable.setBounds(10, 10, 300, 30);

seekBar.setProgressDrawable(shapeDrawable);

这里的问题是,根据specification,第6个参数被定义为

  

可能为空。颜色数组中每个对应颜色的相对位置[0..1]。如果为null,则颜色沿着渐变线均匀分布。

我希望红色和蓝色均匀分布,即一半形状看起来偏红,一半看起来偏蓝(如下图所示)。

enter image description here

所以我尝试了nullnew float[] {0, 0.5f}new float[] {0, 1}作为第6个参数的值。我分别得到了以下三个结果。

  1. 适用于nullenter image description here

  2. 适用于new float[] {0, 0.5f}enter image description here

  3. 适用于new float[] {0, 1}enter image description here

  4. 显示我哪里出错?我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

使用

  

ShapeDrawable#setShaderFactory(ShapeDrawable.ShaderFactory factory)

工厂有一个方法Shader resize(int width, int height),每次你的可绘制边界发生变化时都会调用它,这个地方你应该根据LinearGradient / {{1}返回你的width着色器参数

正如您将看到的,您现在可以传递空height并且颜色将均匀分布