是否可以使用LinearGradient建立渐变,然后在其停靠点的某个位置访问其颜色?
示例:
LinearGradient gradient = LinearGradient(
colors: [Colors.red, Colors.green, Colors.blue],
stops: [0.0,100.0,200.0],
);
如果有类似getColor(double)
的方法,则可能会这样
gradient.getColor(100.0) // returns equivalent to Colors.green
gradient.getColor(150.0) // returns interpolated color between green and blue
我正在尝试使用Flutter的能力来生成渐变,以便为我提供特定值的插值颜色。
编辑
Color lerp(Color a, Color b, double t);
允许您使用与渐变相同的逻辑来混合颜色,但不允许您在颜色列表中进行混合
答案 0 :(得分:1)
我猜想使用lerp
,颜色数组和数组(如果停止),您可以轻松构建该函数。像这样:
Color lerpGradient(List<Color> colors, List<double> stops, double t) {
for (var s = 0; s < stops.length - 1; s++) {
final leftStop = stops[s], rightStop = stops[s + 1];
final leftColor = colors[s], rightColor = colors[s + 1];
if (t <= leftStop) {
return leftColor;
} else if (t < rightStop) {
final sectionT = (t - leftStop) / (rightStop - leftStop);
return Color.lerp(leftColor, rightColor, sectionT);
}
}
return colors.last;
}