GradientDrawable有3种颜色,如何调整中间颜色的大小

时间:2013-08-20 16:18:06

标签: android drawable gradient

我正在开发一个使用 GradientDrawable 创建渐变的项目。用户选择两种颜色,应用程序使用它们创建渐变。我还需要允许用户调整渐变的级别。我使用 setLevel()函数来调整它,当我有两种颜色时,它工作得很好。

问题是当您使用具有3种(或更多)颜色的颜色数组创建 GradientDrawable 时。然后当你使用' setLevel()时,你实际上只是在图像上向上或向下移动中间颜色。

我打算做的是允许用户调整中间颜色的数量。例如,如果用户选择了黑色和白色,并选择了非常少的白色,则图像中间会有一条白线,在两侧(顶部和底部)有一个黑色渐变。当用户调整渐变水平时,白线会扩散得更多,但非常缓慢,不仅仅是在中间产生更大的亮白线。

我开始认为使用带有3种颜色的 GradientDrawable 是不可取的。我的图像正确的解决方案与创建一些覆盖或分层drawable和调整中间颜色向外...任何想法让我指向正确的方向?

以下是我目前使用的(不起作用)来创建 GradientDrawable

new GradientDrawable(myOrientation, arrayOfColorsInt);

看起来我不能发布任何图片(这会非常有帮助),因为我没有声誉....如果有任何方式我可以发送图片给任何人作为一个例子,我可以做到这一点。

这是我最终使用的结果,基于我接受的答案:

public static Drawable getLinearGradient(final int color1,final int color2,final int height){     ShapeDrawable.ShaderFactory sf = new ShapeDrawable.ShaderFactory(){         @覆盖         public Shader resize(int width,int height){             LinearGradient lg = new LinearGradient(0,0,0,height,                 new int [] {                     COLOR1,                     COLOR1,                     COLOR2,                     COLOR1,                     color1},//替换正确的颜色                 new float [] {                     0,.25f,0.50f,.75f,1},                 Shader.TileMode.REPEAT);              返回lg;         }     };     PaintDrawable p = new PaintDrawable();     p.setShape(new RectShape());     p.setShaderFactory(SF);     return(Drawable)p;

1 个答案:

答案 0 :(得分:0)

这是一种方法。我有一段时间没有这样做,这是来自内存,所以你可能需要进行一些实验。要绘制Drawable,请使用使用LinearGradient作为其着色器(而不是纯色)的Paint对象。为LinearGradient提供五种int颜色的数组。

{top color, top color, center color, bottom color, bottom color}

LinearGradient还有一个浮点数组,用于渐变中颜色的标准化位置,因此您可以控制第二个和第四个元素的位置以获得所需的效果。

由于float数组是一个对象,你可以保持对这个数组的引用并修改它的[1]和[4]元素,并在用户更改关卡时使视图无效。

您的Drawable不需要是GradientDrawable就可以使用此Paint对象。