flutter PositionedTransition 实现缩放动画
更多文章请查看 flutter从入门 到精通
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() 正向执行 结束时会回调此方法 |
flutter PositionedTransition 实现中心缩放动画
动画开始与结束分析
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_x/base/base_appbar_page.dart';/*** RelativeRectTween 缩放动画*/
class RelativeRectTweenPage extends StatefulWidget {@overrideState<StatefulWidget> createState() {return new RelativeRectTweenState();}
}class RelativeRectTweenState extends BaseAppBarPageState<RelativeRectTweenPage>with SingleTickerProviderStateMixin {//动画控制器AnimationController controller;Animation<RelativeRect> animation;@overrideString buildInitState() {buildBackBar("动画", backIcon: Icons.arrow_back_ios);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");}});// 这个动画的过程是// 子widget 距左边距离从 10.0 变化 到100.0// 子widget 距上边距离从 10.0 变化 到100.0// 子widget 距右边距离从 10.0 变化 到100.0// 子widget 距下边距离从 10.0 变化 到100.0// 四边同时变化 相同的距离 倍率,所以看出来是 中心缩小的动画RelativeRectTween rectTween = RelativeRectTween(//初始位置设置begin: const RelativeRect.fromLTRB(//子widget 距父布局 left 10.010.0,//子widget 距父布局 top 10.010.0,//子widget 距父布局 right 10.010.0,//子widget 距父布局 bottom 10.010.0),//结束位置设置end: RelativeRect.fromLTRB(//子widget 距父布局 left 100.0100.0,//子widget 距父布局 top 100.0100.0,//子widget 距父布局 right 100.0100.0,//子widget 距父布局 bottom 100.0100.0,),);//关联 controlleranimation = rectTween.animate(controller);return null;}@overrideWidget buildWidget(BuildContext context) {return buildSlideTransition();}@overridevoid dispose() {super.dispose();controller.dispose();}//渐变动画Widget buildSlideTransition() {return Stack(children: <Widget>[//必须作为Stack的子widgetPositionedTransition(rect: animation,child: Container(color: Colors.grey,child: Image.network("http://img5.duitang.com/uploads/item/201411/16/20141116124947_xBNxM.jpeg",),),),Positioned(bottom: 20,left: 20,child: FlatButton(onPressed: () {if (controller.isDismissed) {///正向动画开始controller.forward();} else if (controller.isCompleted) {///反向动画开始controller.reverse();} else {//停止controller.dispose();//重置动画controller.reset();}},child: Text("开始")),)],);}
}
flutter PositionedTransition 向上缩放
RelativeRectTween rectTween = RelativeRectTween(//初始位置设置begin: const RelativeRect.fromLTRB(50.0,50.0,50.0,50.0),//结束位置设置end: RelativeRect.fromLTRB(50.0,50.0,50.0,500.0,),);
flutter PositionedTransition 向右缩放
RelativeRectTween rectTween = RelativeRectTween(//初始位置设置begin: const RelativeRect.fromLTRB(50.0,50.0,50.0,50.0),//结束位置设置end: RelativeRect.fromLTRB(500.0,50.0,50.0,50.0,),);
flutter PositionedTransition 实现缩放动画相关推荐
- flutter ScaleTransition实现缩放动画
更多文章请查看 flutter从入门 到精通 flutter 动画状态监听器 AnimationController //动画控制器AnimationController controller;//A ...
- flutter常用内置动画组件
文章目录 AnimatedContainer AnimatedCrossFade Hero AnimatedBuilder DecoratedBoxTransition FadeTransition ...
- 在 Flutter 中实现文字动画
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Tds9vto6-1626653755909)(https://ducafecat.tech/2021/07/19/tra ...
- Flutter 实现九宫格抽奖动画效果
一.本文实现的九宫格抽奖动画效果如下 二.主要分享下怎么一步一步来实现这个效果 源代码地址 布局可以通过GridView轻松实现,只需在数据源的第五个位置插入一个元素用来标识是开始按钮 抽奖动画的实现 ...
- Flutter 8 个优秀动画 Packages
Flutter 8 个优秀动画 Packages 前言 动画对于使移动应用程序的用户界面感觉自然流畅至关重要.加上交互式元素和平滑的过渡,它们使应用程序简单易用. 正文 Flutter Animate ...
- Android Property Animation属性动画:scale缩放动画(4)
Android Property Animation属性动画:scale缩放动画(4) 和之前我写的附录文章1,2,3相似,本文将接着使用Android Property Animation属性 ...
- 【Animations】使用缩放动画放大视图(7)
原文 概要 本课程演示如何执行触摸缩放动画,这对诸如照片库等应用程序可以将视图从缩略图动画化为充满屏幕的全尺寸图像. 以下是触摸缩放动画看起来像展开图像缩略图以填充屏幕: 视频地址:https://d ...
- 【iOS】图片缩放动画
iOS 开发中,可用 UIView 的下述方法实现图片的缩放动画效果: + transitionWithView:duration:options:animations:completion: 示例代 ...
- AndroidTv Home界面实现原理(二)——Leanback 库的主页卡位缩放动画源码解析
本篇文章已授权微信公众号 dasu_Android(大苏)独家发布 先看个效果图: 上一篇中,我们留了问题,在 Tv Home 界面这种很常见聚焦卡位放大动画效果,我们这一篇就来看看 Leanback ...
最新文章
- CodeSmith实用技巧(十五):使用快捷键
- 推荐:梁宏达与体育评书
- 第二次结对编程之软件测试
- vue点击改变data_vue实现响应式原理即vue如何监听data的每个属性的变化
- python 解决conda的environment未被激活解决方案
- 生命周期 用户可以操作dom_React 生命周期的打怪升级之路
- 【node节点版本管理器NVM,详解安装教程,建议收藏】
- 理解音视频 PTS 和 DTS
- Flink 完美搭档:数据存储层上的 Pravega
- flex 引入css,Flex常用布局
- AcWing 703. 数独检查
- 是真“开发者”,就来一“测”到底!
- linux 下vim文件乱码 cat文件正常处理方法
- python变量类型声明_python基础知识:变量的定义以及类型
- 百度SDN实践与思考
- mysql死锁抛出异常_如何排查和处理 MySQL 死锁异常?详细分析及解决方法步骤
- 中国象棋详细设计分析
- python 直方图匹配_直方图匹配原理与python、matlab实现
- 推荐一些学习嵌入式经典的书籍
- CVE PoC的精选列表(三)
热门文章
- 伦敦帝国学院提出局部特征提取新模式D2D:先描述后检测
- ICCV 2019 | 旷视研究院提出行人搜索当前最佳新方法
- C语言?看女程序员是怎么往死里坑师兄的
- 计算机东大计算机三在线作业,东大16秋学期《计算机基础》在线作业3
- mysql客户端路由方式_20.3 在InnoDB 集群中 使用MySQL 路由
- 清华大学开源迁移学习算法库:基于PyTorch实现已有算法
- CVPR2018 目标检测算法总览(最新的目标检测论文)
- php如何利用soap查看函数,使用PHP soap函数的自定义标题
- mysql 快速复制_MySQL中快速复制数据表方法汇总
- MySQL的JOIN用法