Получить цвет на месте в LinearGradient - PullRequest
0 голосов
/ 30 августа 2018

Есть ли способ построить градиент с помощью 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

Я пытаюсь использовать способность Флаттера генерировать градиенты, чтобы дать мне интерполированные цвета при определенных значениях.

редактировать

Color lerp(Color a, Color b, double t);

позволяет смешивать цвета, используя ту же логику, что и градиент, но не позволяет смешивать список цветов.

1 Ответ

0 голосов
/ 30 августа 2018

Я думаю, используя 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...