Flutter 진급 의 애니메이션 효과 구현(3)
지금부터 하나의 스 트 라 이 프 에 색상 을 추가 하고 Bar 류 의 height 필드 에 color 필드 를 추가 하 며 Bar.lerp 를 업데이트 하여 둘 을 호 환 시 킵 니 다.지난 글 에서'lerp'는'선형 삽입'또는'선형 삽입'의 짧 은 형식 이 라 고 소개 했다.
class Bar {
Bar(this.height, this.color);
final double height;
final Color color;
static Bar lerp(Bar begin, Bar end, double t) {
return new Bar(
lerpDouble(begin.height, end.height, t),
Color.lerp(begin.color, end.color, t)
);
}
}
우리 프로그램 에서 컬러 스 트 라 이 프 를 사용 하려 면 Bar 에서 스 트 라 이 프 색상 을 가 져 올 수 있 도록 BarChartPainter 를 업데이트 해 야 합 니 다.
class BarChartPainter extends CustomPainter {
// ...
@override
void paint(Canvas canvas, Size size) {
final bar = animation.value;
final paint = new Paint()
// Bar
..color = bar.color
..style = PaintingStyle.fill;
// ...
// ...
}
main.dart 동급 디 렉 터 리 에 새로운 color팔레트.dart 파일,색상 가 져 오기 에 사용 합 니 다.
import 'package:flutter/material.dart';
import 'dart:math';
class ColorPalette {
static final ColorPalette primary = new ColorPalette(<Color>[
Colors.blue[400],
Colors.red[400],
Colors.green[400],
Colors.yellow[400],
Colors.purple[400],
Colors.orange[400],
Colors.teal[400],
]);
ColorPalette(List<Color> colors) : _colors = colors {
// bool isNotEmpty: , true
assert(colors.isNotEmpty);
}
final List<Color> _colors;
Color operator [](int index) => _colors[index % length];
//
int get length => _colors.length;
/*
int nextInt(
int max
)
, 0 max( max)
*/
Color random(Random random) => this[random.nextInt(length)];
}
우 리 는 Bar.empty 와 Bar.random 공장 의 구조 함 수 를 Bar 위 에 놓 을 것 이다.
class Bar {
Bar(this.height, this.color);
final double height;
final Color color;
factory Bar.empty() => new Bar(0.0, Colors.transparent);
factory Bar.random(Random random) {
return new Bar(
random.nextDouble() * 100.0,
ColorPalette.primary.random(random)
);
}
static Bar lerp(Bar begin, Bar end, double t) {
return new Bar(
lerpDouble(begin.height, end.height, t),
Color.lerp(begin.color, end.color, t)
);
}
}
main.dart 에서 우 리 는 빈 Bar 와 무 작위 Bar 를 만들어 야 합 니 다.우 리 는 전 자 를 위해 완전히 투명 한 색 을 사용 하고 후 자 는 무 작위 색 을 사용 할 것 이다.
class _MyHomePageState extends State<MyHomePage> with TickerProviderStateMixin {
// ...
@override
void initState() {
// ...
tween = new BarTween(new Bar.empty(), new Bar.random(random));
animation.forward();
}
// ...
void changeData() {
setState(() {
tween = new BarTween(
tween.evaluate(animation),
new Bar.random(random),
);
animation.forward(from: 0.0);
});
}
// ...
}
현재 프로그램의 효 과 는 다음 그림 과 같 습 니 다:이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【Flutter】DateTime 전월의 일수를 취득한다달의 일수를 취득할 필요가 있어, 의외로 수요 있을까라고 생각했으므로 비망록 정도에 남겨 둡니다. DateTime 날짜에 0을 입력하면 전월 DateTime이 됩니다. 2021년 3월 0일 = 2021년 2월 28일...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.