国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

Flutter進階之實現(xiàn)動畫效果(三)

2019-12-12 00:34:30
字體:
供稿:網(wǎng)友

在上一篇文章:Flutter進階―實現(xiàn)動畫效果(二)的最后,我們實現(xiàn)了一個控件,其中包含各種布局和狀態(tài)處理控件。以及使用自定義的動畫感知繪圖代碼繪制單個Bar的控件。還有一個浮動按鈕控件,用于啟動條形圖高度的動畫變化。

現(xiàn)在開始向我們的單個條形添加顏色,在Bar類的height字段下添加一個color字段,并且更新Bar.lerp以使其兩者兼容。在上一篇文章中,介紹過“l(fā)erp”是“線性內(nèi)插”或“線性插值”的一種簡短形式。

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)  ); }}

要在我們的應用程序中使用彩色條形,需要更新BarChartPainter以從Bar獲取條形顏色。

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_palette.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]; // 返回集合中的元素數(shù)量 int get length => _colors.length; /* int nextInt(  int max ) 生成一個非負隨機整數(shù),范圍從0到max(包括max)  */ Color random(Random random) => this[random.nextInt(length)];}

我們將把Bar.empty和Bar.random工廠構(gòu)造函數(shù)放在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中,我們需要創(chuàng)建一個空的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);  }); } // ...}

現(xiàn)在應用程序的效果如下圖:

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 肇州县| 临安市| 岗巴县| 永定县| 长治市| 金塔县| 孝义市| 敦化市| 大安市| 罗山县| 泾川县| 林甸县| 扎鲁特旗| 旌德县| 河北省| 汉源县| 肥西县| 原阳县| 石嘴山市| 长沙县| 酉阳| 苏尼特右旗| 攀枝花市| 额尔古纳市| 基隆市| 永康市| 东安县| 石棉县| 合阳县| 马关县| 湘乡市| 通州区| 碌曲县| 嵩明县| 抚州市| 新平| 盖州市| 彭泽县| 临武县| 金川县| 芦山县|