我想要一个以非线性速率从起始颜色进展到最终颜色的渐变.梯度仅沿单个笛卡尔轴变化.RadialGradient或SweepGradient不是我在这里提到的.
我的问题是,Android是否支持控制渐变转换率,而无需编写自定义着色器?
是的,在某种程度上。LinearGradient 有一个采用多种颜色和位置的构造函数,因此您可以使用分段线性函数来近似非线性渐变。
下面的代码基于答案/sf/answers/306683471/
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);
Run Code Online (Sandbox Code Playgroud)
您可以根据需要添加任意多个停止点以使渐变看起来平滑。我还发现此链接有助于选择平滑渐变的系数https://css-tricks.com/easing-linear-gradients/
归档时间: |
|
查看次数: |
603 次 |
最近记录: |