我正在开发一个使用GradientDrawable创建渐变的项目。用户选择两种颜色,应用程序会使用它们创建渐变。我还需要允许用户调整渐变级别。我使用setLevel()函数来调整它,当我有两种颜色时它工作得很好。
问题是当您使用具有 3 种(或更多)颜色的颜色数组创建GradientDrawable时。然后,当您使用“ setLevel() ”时,实际上只是在图像上向上或向下移动中间颜色。
我打算做的是允许用户调整中间颜色的量。例如,如果用户选择黑白,并选择很少的白色,则图像中间会有一条白线,两侧(顶部和底部)都有渐变为黑色。随着用户调整渐变级别,白线会散开得更多,但会非常缓慢,而不仅仅是在中间形成一条更大的亮白线。
我开始认为使用GradientDrawable不是可行的方法。我认为正确的解决方案与创建某种叠加层或分层可绘制对象并向外调整中间颜色有关……有什么想法可以让我指出正确的方向吗?
这是我目前用来创建GradientDrawable的(不起作用):
new GradientDrawable(myOrientation, arrayOfColorsInt);
看起来我不能发布任何图片(这将非常有帮助),因为我没有声誉......如果有任何方法我可以将图片发送给任何人作为示例,我可以做到这一点。
根据我接受的答案,这是我最终使用的:
public static Drawable getLinearGradient(final int color1, final int color2, final int height) { ShapeDrawable.ShaderFactory sf = new ShapeDrawable.ShaderFactory() { @Override public Shader resize(int width, int height) { LinearGradient lg = new LinearGradient(0 , 0, 0, height, new int[] { color1, color1, color2, color1, color1}, //用正确的颜色替换这些新的 float[] { 0, .25f, 0.50f, .75f, 1 },着色器.TileMode.REPEAT); 返回 lg; } }; PaintDrawable p = new PaintDrawable(); p.setShape(new RectShape()); p.setShaderFactory(sf); 返回(可绘制)p;