最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Flutter進(jìn)階之實(shí)現(xiàn)動(dòng)畫(huà)效果(三)

 更新時(shí)間:2018年08月18日 16:58:16   作者:何小有  
這篇文章主要為大家詳細(xì)介紹了Flutter進(jìn)階之實(shí)現(xiàn)動(dòng)畫(huà)效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

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

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

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

要在我們的應(yīng)用程序中使用彩色條形,需要更新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同級(jí)目錄下新建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:如果此集合中至少有一個(gè)元素,則返回true
  assert(colors.isNotEmpty);
 }

 final List<Color> _colors;

 Color operator [](int index) => _colors[index % length];

 // 返回集合中的元素?cái)?shù)量
 int get length => _colors.length;

 /*
 int nextInt(
  int max
 )
 生成一個(gè)非負(fù)隨機(jī)整數(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中,我們需要?jiǎng)?chuàng)建一個(gè)空的Bar和一個(gè)隨機(jī)的Bar。我們將為前者使用完全透明的顏色,后者將使用隨機(jī)顏色。

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)在應(yīng)用程序的效果如下圖:

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

伊金霍洛旗| 永春县| 麻阳| 定日县| 桂东县| 尉犁县| 宁化县| 龙陵县| 辽中县| 突泉县| 台中县| 大港区| 于田县| 司法| 秀山| 漾濞| 宾阳县| 永城市| 永泰县| 宜州市| 松江区| 尼勒克县| 白朗县| 商河县| 通辽市| 浠水县| 桦川县| 英德市| 邯郸县| 新宁县| 宝鸡市| 余江县| 乌鲁木齐县| 双桥区| 五寨县| 虎林市| 大埔县| 瑞丽市| 平山县| 博野县| 行唐县|