志在巅峰的攀登者,不会陶醉在沿途的某个脚印之中,在码农的世界里,优美的应用体验,来源于程序员对细节的处理以及自我要求的境界,年轻人也是忙忙碌碌的码农中一员,每天、每周,都会留下一些脚印,就是这些创作的内容,有一种执着,就是不知为什么,如果你迷茫,不妨来瞅瞅码农的轨迹。

如果你有兴趣 你可以关注一下公众号 biglead 来获取最新的学习资料。

  • Flutter 从入门 到精通系列文章在这里
  • 当然也必需是要有源码的 在这里了
  • github 有点慢 不妨来看看码云的源码吧
  • 系列学习教程在这里

flutter 动画状态监听器

AnimationController

    //动画控制器AnimationController controller;//AnimationController是一个特殊的Animation对象,在屏幕刷新的每一帧,就会生成一个新的值,// 默认情况下,AnimationController在给定的时间段内会线性的生成从0.0到1.0的数字//用来控制动画的开始与结束以及设置动画的监听//vsync参数,存在vsync时会防止屏幕外动画(动画的UI不在当前屏幕时)消耗不必要的资源//duration 动画的时长,这里设置的 seconds: 2 为2秒,当然也可以设置毫秒 milliseconds:2000.controller =AnimationController(duration: const Duration(seconds: 2), vsync: this);//动画开始、结束、向前移动或向后移动时会调用StatusListenercontroller.addStatusListener((status) {if (status == AnimationStatus.completed) {//动画从 controller.reverse() 反向执行 结束时会回调此方法print("status is completed");// controller.reset(); 将动画重置到开始前的状态//开始执行//controller.forward();} else if (status == AnimationStatus.dismissed) {//动画从 controller.forward() 正向执行 结束时会回调此方法print("status is dismissed");//controller.forward();}else if (status == AnimationStatus.forward) {print("status is forward");//执行 controller.forward() 会回调此状态}else if (status == AnimationStatus.reverse) {//执行 controller.reverse() 会回调此状态print("status is reverse");}});

AnimationController 的常用操作说明

说明
controller.forward() 正向开始执行动画
controller.reverse() 反向开始执行动画
controller.reset() 重置动画到初始状态
controller.dispose() 取消/停止动画

flutter AnimationStatus 动画状态说明

说明
AnimationStatus.forward 执行 controller.forward() 会回调此状态
AnimationStatus.reverse 执行 controller.reverse() 会回调此状态
AnimationStatus.dismissed 动画从 controller.reverse() 反向执行 结束时会回调此方法
AnimationStatus.completed) 动画从 controller.forward() 正向执行 结束时会回调此方法

1 水平向右平移

移动前

移动后

源码

  //动画控制器AnimationController controller;Animation<Offset> animation;
//初始化 //用来控制动画的开始与结束以及设置动画的监听//vsync参数,存在vsync时会防止屏幕外动画(动画的UI不在当前屏幕时)消耗不必要的资源//duration 动画的时长,这里设置的 seconds: 2 为2秒,当然也可以设置毫秒 milliseconds:2000.controller =AnimationController(duration: const Duration(seconds: 2), vsync: this);//动画开始、结束、向前移动或向后移动时会调用StatusListenercontroller.addStatusListener((status) {if (status == AnimationStatus.completed) {//AnimationStatus.completed 动画在结束时停止的状态//ontroller.reverse();} else if (status == AnimationStatus.dismissed) {//AnimationStatus.dismissed 表示动画在开始时就停止的状态//controller.forward();}});//begin: Offset.zero, end: Offset(1, 0) 以左下角为参考点,相对于左下角坐标 x轴方向向右 平移执行动画的view 的1倍 宽度,y轴方向不动,也就是水平向右平移//begin: Offset.zero, end: Offset(1, 1) 以左下角为参考点,相对于左下角坐标 x轴方向向右 平移执行动画的view 的1倍 宽度,y轴方向 向下 平衡执行动画view 的1倍的高度,也就是向右下角平移了animation =Tween(begin: Offset.zero, end: Offset(1, 0)).animate(controller);//开始执行动画
controller.forward();

执行动画的view

//平移Widget buildSlideTransition() {return Center(//SlideTransition 用于执行平移动画child: SlideTransition(position: animation,//将要执行动画的子viewchild: Container(width: 200,height: 200,color: Colors.grey,),),);}

    //begin: Offset(1, 0), end: Offset(1, 1) 在构建布局页面的时候,执行动画的view 会先相对于自身左下角水平向右移动 执行动画的view 的1倍 宽度,//动画开始后 再次 移动到 end: Offset(1, 1)animation =Tween(begin: Offset(1, 0), end: Offset(1, 1)).animate(controller);

2 向右下角平移
//相对于左下角,起始位置相对无平移,终点分别向右向下移动 1倍的宽度与高度,效果即为右下角平移
animation =Tween(begin: Offset(0, 0), end: Offset(1, 1)).animate(controller);


3 垂直向下平移
animation =Tween(begin: Offset(0, 0), end: Offset(0, 1)).animate(controller);
在这里插入代码片

4 flutter 无限循环的平移动画

widget 平移到终点后,再回到起点再次发起平移
关键代码

  //将动画重置到开始前的状态controller.reset();//开始执行controller.forward();

  controller =AnimationController(duration: const Duration(seconds: 2), vsync: this);//动画开始、结束、向前移动或向后移动时会调用StatusListenercontroller.addStatusListener((status) {if (status == AnimationStatus.completed) {//动画从 controller.forward() 正向执行 结束时会回调此方法print("status is completed");//将动画重置到开始前的状态controller.reset();//开始执行controller.forward();} else if (status == AnimationStatus.dismissed) {//动画从 controller.reverse() 反向执行 结束时会回调此方法print("status is dismissed");//controller.forward();} else if (status == AnimationStatus.forward) {print("status is forward");//执行 controller.forward() 会回调此状态} else if (status == AnimationStatus.reverse) {//执行 controller.reverse() 会回调此状态print("status is reverse");}});//begin: Offset.zero, end: Offset(1, 0) 以左下角为参考点,相对于左下角坐标 x轴方向向右 平移执行动画的view 的1倍 宽度,// y轴方向不动,也就是水平向右平移//begin: Offset.zero, end: Offset(1, 1) 以左下角为参考点,相对于左下角坐标 x轴方向向右 平移执行动画的view 的1倍 宽度,// y轴方向 向下 平衡执行动画view 的1倍的高度,也就是向右下角平移了//begin: Offset(1, 0), end: Offset(1, 1) 在构建布局页面的时候,执行动画的view 会先相对于自身左下角水平向右移动 执行动画的view 的1倍 宽度,//动画开始后 再次 移动到 end: Offset(1, 1)animation =Tween(begin: Offset(0, 0), end: Offset(0, 1)).animate(controller);

执行动画的widget

  //平移Widget buildSlideTransition() {return Center(child: SlideTransition(position: animation,//将要执行动画的子viewchild: Container(width: 200,height: 200,color: Colors.grey,),),);}

动画执行到终点后,再由终点反向回到起点

    controller =AnimationController(duration: const Duration(seconds: 2), vsync: this);//动画开始、结束、向前移动或向后移动时会调用StatusListenercontroller.addStatusListener((status) {if (status == AnimationStatus.completed) {//动画从 controller.forward() 正向执行 结束时会回调此方法print("status is completed");//将动画重置到开始前的状态controller.reverse();} else if (status == AnimationStatus.dismissed) {//动画从 controller.reverse() 反向执行 结束时会回调此方法print("status is dismissed");controller.forward();} else if (status == AnimationStatus.forward) {print("status is forward");//执行 controller.forward() 会回调此状态} else if (status == AnimationStatus.reverse) {//执行 controller.reverse() 会回调此状态print("status is reverse");}});

flutter SlideTransition实现平移动画相关推荐

  1. Flutter 平移动画 — 4种实现方式

    系列文章 Flutter 旋转动画 - RotationTransition Flutter 平移动画 - 4种实现方式 Flutter 淡入淡出与逐渐出现动画 Flutter 尺寸缩放.形状.颜色. ...

  2. Activity平移动画

    Activity平移动画 效果图 添加动画文件 在res下添加anim文件夹,在anim下添加几个动画文件,分别是进入和退出的动画时间和移动距离,属性很简单,一看就懂,不磨叽了. tran_next_ ...

  3. android 透明度变化,安卓获取屏幕的宽高并设置平移动画和透明度变化

    在做X6影院的时候遇到了一个问题,需要在引导页做特效,做一个平移的动画,在平移的同时,做透明度变化. //平移动画.需要获取到屏幕的宽高比,获取代码如下private WindowManager wi ...

  4. flutter RotationTransition实现旋转动画

    更多文章请查看 flutter从入门 到精通 flutter 动画状态监听器 AnimationController //动画控制器AnimationController controller;//A ...

  5. Android 仿微信红包动画 平移动画

    Android 仿微信红包动画 平移动画 先看效果图: 简单思路: 先找好素材,一张红包封面和 "开"这个图片,先用ps将红包图片P成两部分,两个椭圆的样子."开&quo ...

  6. 【小程序】微信小程序重复循环平移动画

    1.说明 需求是让一张图片不断重复地从下往上移动,实现方法由多种,wx.createAnimation.关键帧动画.swiper等都能实现 2.wx.createAnimation 最先想到的是使用w ...

  7. 原生JavaScript实现简单平移动画

    1. 知识点 : 计时器 (serInterval  &&  clearIntreval ) js获取到CSS样式 (getComputedStyle  &&  cur ...

  8. echarts图表平移动画

    1. 最近项目需求,要做一个echarts图表平移动画的效果,数据如下格式, 2. 然后用setInterval调用,其实实现这种效果,就是用计时器,push一个数据进去,然后删除第一个数据就可以呢. ...

  9. Android平移补间动画,Android 补间动画之平移动画TranslateAnimation

    Android动画系列 博客导航: 1.介绍: Android补间动画之平移动画,在实际的开发过程中,其实有好多地方需要用到平移动画,这是对于平移动画的简单介绍. 2.属性 duration 时间 f ...

最新文章

  1. PTA 1002 Business (35分)
  2. 达梦数据库查询数据库所有表名_达梦数据库的一些实用小SQL
  3. python语言程序设计编程题_Python语言程序设计(测试练习题)
  4. Swift - defer关键字(推迟执行)
  5. 敏而好学,不耻下问。
  6. [转帖] 资本的力量
  7. Caffe傻瓜系列(5):Blob,Layer and Net以及对应配置文件的编写
  8. 阶段1 语言基础+高级_1-3-Java语言高级_07-网络编程_第2节 TCP协议_3_TCP通信的客户端代码实现...
  9. 浙江大学计算机程序设计能力考试(PAT)简介
  10. 计算广告丨《互联网广告算法和系统实践》读书笔记
  11. 【Leetcode刷题篇】Leetcode714 买卖股票的最佳时机含手续费
  12. 大数据战略能不能打造第二个百度?
  13. easypanel默认php版本设置,easypanel面板+kangle
  14. 类对象初始化和Initializer_list的
  15. Led台灯对眼睛好吗?2022双十一不伤眼的护眼灯推荐
  16. 孟:解密获取网站访客QQ号码的方法及原理
  17. 使用openssl转换pem为pfx证书
  18. http url get方式传递数组参数
  19. SRS:流媒体服务器如何实现负载均衡
  20. 解析机器人流程自动化技术的原理

热门文章

  1. CV Papers|计算机视觉论文推荐周报20200503期
  2. 小目标检测的福音:Stitcher,简单又有效
  3. CVPR 2019 Oral | 华科开源效果超群的人体姿态迁移算法
  4. 清华计算机复试线2020,清华大学2020年研考复试线公布,复试时间待定
  5. 反射 数据类型_C#扫盲篇(一):反射机制情真意切的说
  6. 阿里巴巴Python工程师面试题之一:单引号,双引号,三引号的区别
  7. MIT“35岁以下科技创新35人”榜单揭晓
  8. 深度学习算法 | LSTM算法原理简介及Tutorial
  9. 从零开始编写深度学习库(二)FullyconnecteLayer CPU编写
  10. dremwere怎样让多个图片并列排放_国标双壁波纹管直径200、300、400、500、600、800图片展示...