打开一个APP,经常会看到精美的启动页,这种启动页也称为闪屏动画。它是从无到有有一个透明度的渐变动画的。图像展示完事后,才跳转到用户可操作的页面。

AnimationController

AnimationControllerAnimation的一个子类,它可以控制Animation, 也就是说它是来控制动画的,比如说控制动画的执行时间。

我们这里有了两个参数 :

  • vsync:this :垂直同步设置,使用this就可以了。
  • duration : 动画持续时间,这个可以使用seconds秒,也可以使用milliseconds毫秒,工作中经常使用毫秒,因为秒还是太粗糙了。

来看一段代码,这段代码就是控制动画的一个典型应用。

_controller = AnimationController(vsync: this,duration: Duration(milliseconds: )); //3000毫秒
_animation = Tween(begin: 0.0, end: 1.0).animate(_controller);

这段代码的意思是,设置一个动画控制器,这个动画控制器控制动画执行时间是3000毫秒。然后我们设置了一段动画,动画使用了动画控制器的约定。

animation.addStatusListener

animation.addStatusListener动画事件监听器,它可以监听到动画的执行状态,我们这里只监听动画是否结束,如果结束则执行页面跳转动作。

_animation.addStatusListener((status){
if(status == AnimationStatus.completed){
Navigator.of(context).pushAndRemoveUntil( //跳转到下页,并把动画结束掉
MaterialPageRoute(builder: (context) => FirstPage()),
(route) => route==null
);
}
});
  • AnimationStatus.completed:表示动画已经执行完毕。
  • pushAndRemoveUntil:跳转页面,并销毁当前控件。

完整代码如下:

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch:Colors.blue,
),
home:SplashScreen()
);
}
} class SplashScreen extends StatefulWidget {
_SplashScreenState createState() => _SplashScreenState();
} class _SplashScreenState extends State<SplashScreen> with SingleTickerProviderStateMixin{
AnimationController _controller; //控制器,一般控制动画和时间
Animation _animation; //动画
//初始化状态
@override
void initState() {
super.initState();
_controller = AnimationController(vsync: this,duration: Duration(milliseconds: )); //3000毫秒
_animation = Tween(begin: 0.0, end: 1.0).animate(_controller);
//监听事件
_animation.addStatusListener((status){
if(status == AnimationStatus.completed){ //判断动画已经执行完毕
Navigator.of(context).pushAndRemoveUntil( //跳转到下页,并把动画结束掉
MaterialPageRoute(builder: (context) => FirstPage()),
(route) => route==null
);
}
});
_controller.forward(); //播放动画
}
//控制器销毁
@override
void dispose() {
_controller.dispose();
super.dispose();
} @override
Widget build(BuildContext context) {
return FadeTransition( //动画透明过度
opacity: _animation,
child: Image.asset(
'images/lake.jpg',
scale:2.0, //图片缩放
fit:BoxFit.cover //填充 充满屏幕
),
);
}
}

FirstPage.dart文件

class FirstPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('闪屏动画'),),
body: Center(
child: Text('首页'),
),
);
}
}

Flutter的闪屏动画案例AnimationController的更多相关文章

  1. flutter 打开应用的闪屏动画

    import 'package:flutter/material.dart'; import 'package:flutter_app/pages/SplashScreen.dart'; void m ...

  2. Cocos闪屏视频VideoPlayer踩坑记录

    游戏闪屏动画(Logo&健康游戏公告)使用了 experimental::ui::VideoPlayer 来播放视频 3.7版本开发到目前为止发现2个坑 1.设置大小 _videoPlayer ...

  3. 设置 phoneGap/Cordova 3.4 应用程序启动动画闪屏 SplashScreen

    当Cordova 程序打包并安装到手机中后,我们会发现启动程序时,会有数秒的黑屏现象,常见的解决方法则是设置闪屏后面. 这里以 Android 程序为例,介绍Cordova设置启动画面的方法. 1. ...

  4. 解决web翻转动画闪屏

    首先确保backface-visibility: hidden.这样做可以解决大部分闪屏的情况. 然后需要特别注意的是谷歌的浏览器,不管是桌面端还是移动端,在翻转的过程中在该元素上绘制其他元素也会导致 ...

  5. android 的闪屏效果

    android的闪屏效果,就是我们刚开始启动应用的时候弹出的界面或者动画,过2秒之后自动的跳转到主界面. 其实,实现这个效果很简单,使用Handler对象的postDelayed方法就可以实现.在这个 ...

  6. imx6 android 进入文件系统闪屏

    imx6进入文件系统的时候都会闪屏,应该是framebuffer未初始化,就已经打开了背光.目前解决办法,在kenel阶段关闭背光,显示android的开机动画之后(此时framebuffer已经初始 ...

  7. 看项目得到info_freeCsdn-01闪屏页面

    /** * 渐变展示启动屏 */ private void startAnimation() { Animation aa = new Animation() { }; aa.setDuration( ...

  8. ios transition translate 闪屏问题总结

    webkit在绘制页面时会将结构分为各种层,当层足够大时就会变成很大的平铺层.这样一来webkit在每次页面结构发生变化时不需要都渲染整个页面而是渲染对应层了,这对渲染速度来说相当的重要.webkit ...

  9. 主流智能手机屏幕材质介绍 及 LCD闪屏现象分析

    TN            TN(Twisted Nematic) 即扭曲向列型面板,属于有源矩阵液晶显示器中的一种.由于TFT是主动式矩阵LCD可让液晶的排列方式具有记忆性,不会在电流消失后马上恢复 ...

随机推荐

  1. Docker 退出不关闭容器以及保存日志到本地

    Docker保存日志到本地 docker logs +你需要添加的额外参数 + 容器id > 文件名称 然后查看这个文件就可以了,也可以通过ftp协议下载到本地 Docker退出容器不关闭容器的 ...

  2. WCF错误处理

    介绍 WCF(Windows Communication Foundation) -异常处理:一般Exception的处理,FaultException和FaultException<T> ...

  3. validatebox自定义验证规则以及使用

    //===============jsp======state==== //开启验证 <script  type="text/javascript"> ​​​​​​​y ...

  4. ESLint 报错 import/no-unresolved

    马的,就这个规则百度了大半天终于找到可以用的: 不得不说百度真的辣鸡 还是翻墙去谷歌找到了解决方法 解决方法是:在 .eslintrc 中设置 "rules": { "i ...

  5. 分布式文件系统FastDFS架构认知

    FastDFS是一款类Google FS的开源分布式文件系统(应用级的分布式文件存储服务). FastDFS的设计理念 FastDFS是为互联网应用量身定做的分布式文件系统,充分考虑了冗余备份.负载均 ...

  6. java.sql.SQLException: 不支持的字符集 (在类路径中添加 orai18n.jar): ZHS16GBK

    在pom.xml文件中添加如下依赖: <!-- https://mvnrepository.com/artifact/cn.easyproject/orai18n --> <depe ...

  7. idea 启动 Error running 'XxGatewayApplication': Command line is too long. Shorten command line for XxGatewayApplication or also for Spring Boot default

    在idea workspace里 <component name="PropertiesComponent">标签下加入 <property name=" ...

  8. LOJ2537. 「PKUWC2018」Minimax [DP,线段树合并]

    传送门 思路 首先有一个\(O(n^2)\)的简单DP:设\(dp_{x,w}\)为\(x\)的权值为\(w\)的概率. 假设\(w\)来自\(v1\)的子树,那么有 \[ dp_{x,w}=dp_{ ...

  9. 1558:聚会 ybt

    1558:聚会 ybt 题解(看似很难,其实要是摸清了实质这就是个大水题) 上题目 1558:聚会 时间限制: 1000 ms         内存限制: 524288 KB提交数: 82     通 ...

  10. linux C file format analysis

    c语言文件格式 source file file.c C source, ASCII text pretreatment 预处理文件 file.i C source, ASCII text assem ...