Для ElasticOutCurve я хотел бы увеличить максимальное значение превышения границ. Я пытался создать пользовательскую кривую или увеличить период, пока безуспешно.
Как я могу этого добиться?
Сначала давайте посмотрим на источник ElasticOutCurve (из источник флаттера):
class ElasticOutCurve extends Curve {
/// Creates an elastic-out curve.
///
/// Rather than creating a new instance, consider using [Curves.elasticOut].
const ElasticOutCurve([this.period = 0.4]);
/// The duration of the oscillation.
final double period;
@override
double transformInternal(double t) {
final double s = period / 4.0;
return math.pow(2.0, -10 * t) * math.sin((t - s) * (math.pi * 2.0) / period) + 1.0;
}
@override
String toString() {
return '$runtimeType($period)';
}
}
Мы видим, что все, что они делают, — это элементарная математика.
Вот график, показывающий кривую ослабления алгоритма флутера:
А вот что получится, если секцию (pow*sin) умножить на 3:
Вся заслуга в создании графиков принадлежит Wolfram Alpha.
Если вы играли с разными константами, вы также можете настроить их другими способами, хотя вам нужно убедиться, что они всегда начинаются с 0 и заканчиваются на 1.
К сожалению, команда Flutter не сделала кривую немного более гибкой, но, поскольку исходный код флаттера является открытым, достаточно легко скопировать их кривую, чтобы создать свою собственную.