我想设置一个带有线性渐变的自定义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,则颜色沿着渐变线均匀分布。
我希望红色和蓝色均匀分布,即一半形状看起来偏红,一半看起来偏蓝(如下图所示)。
所以我尝试了null
,new float[] {0, 0.5f}
和new float[] {0, 1}
作为第6个参数的值。我分别得到了以下三个结果。
答案 0 :(得分:1)
使用
ShapeDrawable#setShaderFactory(ShapeDrawable.ShaderFactory factory)
工厂有一个方法Shader resize(int width, int height)
,每次你的可绘制边界发生变化时都会调用它,这个地方你应该根据LinearGradient
/ {{1}返回你的width
着色器参数
正如您将看到的,您现在可以传递空height
并且颜色将均匀分布