之前我们提到了flutter提供了比较简单好用的AnimatedContainer和SlideTransition来进行一些简单的动画效果,但是要完全实现自定义的复杂的动画效果,还是要使用AnimationController。
今天我们来尝试使用AnimationController来实现一个拖拽图片,然后返回原点的动画。
(相关资料图)
在本文的例子中,我们希望能够让一个图片可以实现拖拽然后自动返回原来位置的效果。
为了实现这个功能,我们首先构建一个放在界面中间的图片。
child: Align( alignment: Alignment.center, child: Card( child: Image(image: AssetImage("images/head.jpg")) ), )
这里使用了Align组件,将一个图片对象放在界面中间。
接下来我们希望这个widget可以拖拽,那么把这个child放到一个GestureDetector中,这样就可以相应拖拽对应的响应。
Widget build(BuildContext context) { final size = MediaQuery.of(context).size; return GestureDetector( onPanUpdate: (details) { setState(() { _animateAlign += Alignment( details.delta.dx / (size.width / 2), details.delta.dy / (size.height / 2), ); }); }, child: Align( alignment: _animateAlign, child: Card( child: widget.child, ), ), ); }
为了能实现拖动的效果,我们需要在GestureDetector的onPanUpdate方法中对Align的位置进行修改,所以我们需要调用setState方法。
在setState方法中,我们根据手势的位置来调整Alignment的位置,所以这里需要用到MediaQuery来获取屏幕的大小。
但是现在实现的效果是图像随手势移动而移动,我们还需要实现在手放开之后,图像自动回复到原来位置的动画效果。
让图像动起来因为这次需要变动的是Alignment,所以我们先定义一个包含Alignment的Animation属性:
late Animation _animation;
接下来我们需要定义一个AnimationController,用来控制动画信息,并且指定我们需要的动画起点和终点:
late AnimationController _controller; _animation = _controller.drive( AlignmentTween( begin: _animateAlign, end: Alignment.center, ), );
我们动画的起点位置就是当前image所在的Alignment,终点就在Alignment.center。
Alignment有一个专门表示位置信息的类叫做AlignmentTween,如上代码所示。
有了起点和终点, 我们还需要指定从起点移动到终点的方式,这里模拟使用弹簧效果,所以使用SpringSimulation。
SpringSimulation需要提供对spring的描述,起点距离,结束距离和初始速度。
const spring = SpringDescription( mass: 30, stiffness: 1, damping: 1, ); final simulation = SpringSimulation(spring, 0, 1, -1);
我们使用上面创建的simulation,来实现动画:
_controller.animateWith(simulation);
最后我们需要在手势结束的时候来执行这个动画即可:
onPanEnd: (details) { _runAnimation(); },
最后,运行效果如下所示:
总结AnimationController是一个很强大的组件,但是使用起来也不是那么的复杂, 我们只需要定义好起点和终点,然后指定动画效果即可。
本文的例子:https://github.com/ddean2009/learn-flutter.git
标签:
简介之前我们提到了flutter提供了比较简单好用的AnimatedContainer和SlideTransition来进行一些简单的动画
1、看穿不说穿的唯美句子。2、为人处事:看穿但不说穿…2、原标题:为人处事:看穿但不说穿…3、不要因为冲
北京4月二手住宅价格环比+0 1%(前值+0 7%),同比+3 3%(前值+3 8%);上海4月二手住宅价格环比-0 2%(前
在游戏《雪居之地(Wildfrost)》中,小汀克森的抓位是比较低,而且在没有回收牌的时候才会考虑,同时在场上
逾期催收上门违法吗?一般上门催收是合法的,只要催收人员没有出现暴力催收等违法行为就可以,第三方催收
5月16日,记者从中国海油获悉,经过26 5小时的现场作业,来自海合会国家阿联酋的液化天然气(LNG)运输船“
厦门大学电影学院戏剧影视系博士生王姝。(记者林铭鸿摄)月球驱动机即将毁灭,撞向地球,人类危在旦夕。挽
在近期A股市场行情极端分化,一些资金转向了可转债的交易。而从年报数据来看,这些转债都曾出现私募大佬林
1、vivo手机截屏方法:其实最简单的当然就是,同时摁下home键和电源键两个按键,就可以实现截屏功能,这个
1、首尔”与“SEOUL”接轨李明博表示:绝大多数国家都将韩国首都按其韩语发音来称呼,大多类似于英文标记“
5月16日工程机械板块较上一交易日下跌0 29%,五新隧装领跌。当日上证指数报收于3290 99,下跌0 6%。深证成
出汗的成分没研究过。但效果肯定是不一样的。出汗分为主动出汗和被动出汗两种,蒸桑拿就是被动出汗,运动出
乐居财经邓如菲5月5日,武汉格蓝若智能技术股份有限公司(以下简称“格蓝若”)披露首次公开发行股票并在科
旅游服务质量保证金存取管理办法,关于旅游服务质量保证金存取管理办法介绍这个很多人还不知道,现在让我们
音频解说一、安徽省巢湖市天气预报巢湖市气象台2023年05月16日18时37分发布大风蓝色预警信号。预计24小时内
App5月16日消息,据报道,国家统计局5月16日发布了今年前4个月宏观经济数据。房地产方面,1-4月份,商品房
“我是宁夏川的娃,唱着宁夏川的花儿,听着驼铃穿过大漠风沙……”5月16日,“宁夏花儿”高亢动听的旋律在
5月16日,广州地铁公布了2023年4月广州在建地铁的最新建设进度。
洛天依空降美依礼芽B站直播间二次元双顶流梦幻联动
1、燕京理工学院历史文法学院。汉语言专业属于燕京工学院文法学院,本科四年制,文学学位。燕京理工学院是
2023苏州灵活就业人员参加企业职工基本养老保险的,缴费工资基数分为十二档,医疗保险月缴费基数为4250元,
直播吧5月16日讯2023年女子欧冠决赛将在当地时间6月3日在PSV体育场举行,巴塞罗那女足和沃尔夫斯堡女足将争
上证报中国证券网讯(记者何奎)5月16日,国债期货各主力合约涨跌不一。截至收盘,30年期国债期货(TL2306
【特斯拉上海工厂据报正为odl3改款车型试生产做最后准备】据报道,特斯拉上海工厂在为odl3改款车型的试生产
Asobism Co ,Ltd制作并发行的塔防建造《模型英雄工场(ShapeHeroFactory)》上架steam,年内发售预定,本作
房产遗嘱需要公证吗房产遗嘱只要符合有效条件,就是有效的,因为公证不是遗嘱的生效要件。但遗嘱的形式比
枫树浏览器打不开,枫树极速浏览器这个很多人还不知道,现在让我们一起来看看吧!1、肯定是枫树浏览器好啊,
今天来聊聊关于大米发糕的家庭的做法窍门,大米发糕的家庭的做法的文章,现在就为大家来简单介绍下大米发糕
近年来,随着我国人均寿命的延长,前列腺癌的发病率在逐年攀升,我国多数患者初诊时已发生转移。
金投网提供熊猫发行30周年1盎司币价格今天多少一克(2023年05月16日),熊猫发行30周年1盎司币价格最新消息
Copyright © 2015-2022 世界服装网版权所有 备案号:琼ICP备2022009675号-1 联系邮箱:435 227 67@qq.com