3

我想在我的SeekBar. 我在以下代码段的第二个语句中创建 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);

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

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

我希望红色和蓝色均匀分布,即一半的形状应该呈现红色,一半呈现蓝色(如下图所示)。

在此处输入图像描述

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

  1. 对于null在此处输入图像描述

  2. 对于new float[] {0, 0.5f}在此处输入图像描述

  3. 对于new float[] {0, 1}在此处输入图像描述

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

4

1 回答 1

2

利用

ShapeDrawable#setShaderFactory(ShapeDrawable.ShaderFactory 工厂)

工厂有一个方法Shader resize(int width, int height),每次您的可绘制边界更改时都会调用该方法,这是您应该LinearGradient根据width/height参数返回着色器的地方

如您所见,您现在可以传递 nullpositions并且颜色将均匀分布

于 2016-03-14T08:03:40.483 回答