Android是否支持渐变中的非线性进展?

我想要一个以非线性速率从起始颜色进展到最终颜色的渐变。 梯度仅沿单个笛卡尔轴变化。 RadialGradient或SweepGradient不是我在这里提到的。

我的问题是,Android是否支持控制渐变转换率,而无需编写自定义着色器?

是的,在某种程度上。 LinearGradient具有一个采用多种颜色和位置的构造函数,因此您可以使用分段线性函数来近似非线性级数。

以下代码基于答案https://stackoverflow.com/a/4381192/8568479

ShapeDrawable.ShaderFactory shaderFactory = new ShapeDrawable.ShaderFactory() { @Override public Shader resize(int width, int height) { LinearGradient gradient = new LinearGradient(0, 0, width, height, new int[] { Color.parseColor("#000000"), Color.parseColor("#777777"), Color.parseColor("#FFFFFF") }, new float[] { 0, 0.3f, 1 }, Shader.TileMode.REPEAT ); return gradient; } }; PaintDrawable p = new PaintDrawable(); p.setShape(new RectShape()); p.setShaderFactory(shaderFactory); 

您可以根据需要添加任意数量的停靠点,以使渐变看起来更平滑。 我还发现此链接有助于为平滑渐变选择系数https://css-tricks.com/easing-linear-gradients/