网站界面技术方案韩漫网站建设

web/2025/9/25 16:31:16/文章来源:
网站界面技术方案,韩漫网站建设,c2c交易平台下载,做国外搞笑网站在任何系统的UI框架中#xff0c;动画原理都是类似的#xff0c;即#xff1a;在一段时间内#xff0c;快速地多次改变UI外观#xff1b;由于人眼会产生视觉暂留#xff0c;所以最终看到的就是一个“连续”的动画。 Flutter中对动画进行了抽象#xff0c;主要涉及 Anim…在任何系统的UI框架中动画原理都是类似的即在一段时间内快速地多次改变UI外观由于人眼会产生视觉暂留所以最终看到的就是一个“连续”的动画。 Flutter中对动画进行了抽象主要涉及 Animation、Curve、Controller、Tween这四个角色它们一起配合来完成一个完整动画。 1.基本概念 1. Animation Animation是一个抽象类它本身和UI渲染没有任何关系而它主要的功能是保存动画的插值和状态。Animation对象是一个在一段时间内依次生成一个区间(Tween)之间值的类。Animation对象在整个动画执行过程中输出的值可以是线性的、曲线的、一个步进函数或者任何其他曲线函数等等这由Curve来决定。 我们可以通过Animation来监听动画每一帧以及执行状态的变化Animation有如下两个方法 addListener()它可以用于给Animation添加帧监听器在每一帧都会被调用。帧监听器中最常见的行为是改变状态后调用setState()来触发UI重建。addStatusListener()它可以给Animation添加“动画状态改变”监听器动画开始、结束、正向或反向见AnimationStatus定义时会调用状态改变的监听器。 2. Curve 动画过程可以是匀速的、匀加速的或者先加速后减速等。Flutter中通过Curve曲线来描述动画过程我们把匀速动画称为线性的(Curves.linear)而非匀速动画称为非线性的。 要使用非匀速动画我们可以通过CurvedAnimation来指定动画的曲线如 final CurvedAnimation curve CurvedAnimation(parent: controller, curve: Curves.easeIn);Curve的关键是实现一个transform方法就是 transform(double t) → double t是时间点取值是0到1之间。返回值是动画的进展取值也是0到1之间。 3. AnimationController AnimationController派生自Animationdouble因此可以在需要Animation对象的任何地方使用。 但是AnimationController具有控制动画的其他方法包含动画的启动forward()、停止stop() 、反向播放 reverse()等方法。AnimationController可以在一段时间里生成一个区间默认是0.0到1.0中的值 final AnimationController controller AnimationController( duration: const Duration(milliseconds: 2000), lowerBound: 10.0,upperBound: 20.0,vsync: this );4. Tween 默认情况下AnimationController对象值的范围是[0.01.0]。如果我们需要构建UI的动画值在不同的范围或不同的数据类型则可以使用Tween来添加映射以生成不同的范围或数据类型的值。例如 final Tween colorTween ColorTween(begin: Colors.transparent, end: Colors.black54);Tween继承自AnimatableT而不是继承自AnimationTAnimatable中主要定义动画值的映射规则。 Tween对象不存储任何状态相反它提供了evaluate(Animationdouble animation)方法它可以获取动画当前映射值。 Animation对象的当前值可以通过value()方法取到。evaluate函数还执行一些其他处理例如分别确保在动画值为0.0和1.0时返回开始和结束状态。 要使用 Tween 对象需要调用其animate()方法然后传入一个控制器对象。例如以下代码在 500 毫秒内生成从 0 到 255 的整数值。 final AnimationController controller AnimationController(duration: const Duration(milliseconds: 500), vsync: this, ); Animationint alpha IntTween(begin: 0, end: 255).animate(controller);5.CurveTween CurveTween有别于Tween的是它不能指定动画值的上下限它的作用是根据指定的Curve来转换animation的值。Tween可以通过chain来组合CurveTween实现指定区间的动画曲线。 6.CurvedAnimation CurvedAnimation是将动画曲线应用到已有Animation来生成一个新的Animation。 简单论述下几者的关系animated之间可以chainanimated可以对已有animation进行animate来生成新的animationanimation可以drive animated来生成animationcontroller是一个完备的animation可以直接使用除非数值区间或者动画曲线不符合要求。基于以上论述以下代码是等效的 //1 final Animationdouble cAnimation1 CurvedAnimation(parent: controller,curve: Curves.ease, ); final Animationdouble animation Tween(beigin:0.0, end:2.0).animate(cAnimation1)//2 final Animationdouble animation Tween(beigin:0.0, end:2.0).chain(CurveTween(curve: Curves.ease)).animate(controller)//3 final Animationdouble cAnimation2 controller.drive(CurveTween(curve: Curves.ease), ); final Animationdouble animation Tween(beigin:0.0, end:2.0).animate(cAnimation2) 2.实现细节 1.vsync:this 我们看到前面AnimationController构造函数里有个vsync参数我们把this传了进去而且我们还在this所指向的state混入了SingleTickerProviderStateMixin。我们来看看实现源码 过 vsync 对象创建了一个 _ticker 而传入的 _tick 是一个回调函数。查看源码它是用于更新 value 也就是说 AnimationController.value 是在此回调中发生改变。 我们将视角回调 _ticker vsync.createTicker(_tick); 来看看 Ticker 。 2.Ticker class Ticker {TickerFuture? _future;bool get muted _muted;bool _muted false;set muted(bool value) {if (value muted)return;_muted value;if (value) {unscheduleTick();} else if (shouldScheduleTick) {scheduleTick();}}bool get isTicking {if (_future null)return false;if (muted)return false;if (SchedulerBinding.instance!.framesEnabled)return true;if (SchedulerBinding.instance!.schedulerPhase ! SchedulerPhase.idle)return true; // for example, we might be in a warm-up frame or forced framereturn false;}protectedbool get shouldScheduleTick !muted isActive !scheduled;void _tick(Duration timeStamp) {assert(isTicking);assert(scheduled);_animationId null;_startTime ?? timeStamp;_onTick(timeStamp - _startTime!);if (shouldScheduleTick)scheduleTick(rescheduling: true);}protectedvoid scheduleTick({ bool rescheduling false }) {assert(!scheduled);assert(shouldScheduleTick);_animationId SchedulerBinding.instance!.scheduleFrameCallback(_tick, rescheduling: rescheduling);}protectedvoid unscheduleTick() {if (scheduled) {SchedulerBinding.instance!.cancelFrameCallbackWithId(_animationId!);_animationId null;}assert(!shouldScheduleTick);}mustCallSupervoid dispose() {if (_future ! null) {final TickerFuture localFuture _future!;_future null;assert(!isActive);unscheduleTick();localFuture._cancel(this);}} }Ticker 由 SchedulerBinding 驱动。flutter 每绘制一帧就会回调 Ticker._onTick()所以每绘制一帧 AnimationController.value 就会发生变化。 接下来看一下 Ticker 其他成员与方法 muted : 设置为 ture 时钟仍然可以运行但不会调用该回调。isTicking: 是否可以在下一帧调用其回调如设备的屏幕已关闭则返回false。_tick(): 时间相关的计算交给 _onTick()受到 muted 影响。scheduleTick(): 将 _tick() 回调交给 SchedulerBinding 管理flutter 每绘制一帧都会调用它。unscheduleTick(): 取消回调的监听。 _onTick在AnimationController中实现 这里主要更新value、status以及notifyListeners。对于renderObject调用notifyListeners会调用markNeedsPaint方法在下一帧进行重绘。 把_onTick传入创建Ticker的方法 3.SingleTickerProviderStateMixin optionalTypeArgs mixin SingleTickerProviderStateMixinT extends StatefulWidget on StateT implements TickerProvider {Ticker? _ticker;overrideTicker createTicker(TickerCallback onTick) {_ticker Ticker(onTick, debugLabel: kDebugMode ? created by $this : null)return _ticker!;}overridevoid dispose() {super.dispose();}overridevoid didChangeDependencies() {if (_ticker ! null)_ticker!.muted !TickerMode.of(context);super.didChangeDependencies();}} SingleTickerProviderStateMixin 就是我们在 State 中 vsync:this 它做了一个桥梁连接了 State 与 Ticker 。 以上源码重要一点是在 didChangeDependencies() 中将 muted !TickerMode.of(context) 初始化一遍。 TickerMode是 InheritedWidget 中 widget 中的属性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/81713.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

企业微信下载官方网站discover wordpress

力扣题-12.12 [力扣刷题攻略] Re:从零开始的力扣刷题生活 力扣题1:539. 最小时间差 解题思想:将字符串的时间形式换成数字形式的时间,然后计算差值即可,最重要的是最小的值加上一天的时间加入到数组最后&#xff08…

江苏省住房和城乡建设厅网站首页抖音珠宝代运营

问题分析: SpringMVC 是一种基于 Java 语言开发,实现了 Web MVC 设计模式,请求驱动类型 的轻量级 Web 框架。 SpringMVC采用了 MVC 架构模式的思想,通过把 Model,View,Controller 分离,将 Web 层…

网站多久需要维护用服务器建立网站

说起map和set,想必我们都学过红黑树了吧,map和set就是红黑树的一个应用领域。它的底层就是由红黑树来实现的。下面简单说一下map和set的使用吧。 首先,有一个栗子是这样的,让我们统计出每种水果出现的次数。 我们会想到怎么解决…

课程培训网站建设百度推广一年多少钱

这个月 Go 语言就将迎来它的10岁生日了,于是我们特地列出了10条让你可以开心使用 Go 语言的理由。 作者:4bytes 这个月 Go 语言就将迎来它的10岁生日了,于是我们特地列出了10条让你可以开心使用 Go 语言的理由。 Map 集合/映射默认使用0值 …

汽车网站国外中文网站排行榜单

中国教育在线讯 辞职创业,还是维持现在稳定的工作?这个是很多上班族都纠结过的问题,一边是稳定的工作和收入,一边是创业当老板的诱惑,真是很难选择。 其实,如果安排合理是可以“鱼与熊掌”兼得的,沈阳市古…

上海企业网站建设价格深圳建站公司是国企吗

专栏简介:本专栏作为Rust语言的入门级的文章,目的是为了分享关于Rust语言的编程技巧和知识。对于Rust语言,虽然历史没有C、和python历史悠远,但是它的优点可以说是非常的多,既继承了C运行速度,还拥有了Java…

网站制作网站设计jsp网站开发标准

目录 一、启动程序的入口 二、初始化硬件浮点单元fpu 三、全局指针 四、设置系统栈 五、设置内存 六、设置Cache 七、配置协处理器 八、初始化TLB 一、启动程序的入口 FRAME(_start, sp, 0, ra):这一行是一个汇编宏,用于创建一个函数框架。_star…

嘉兴建设工程造价信息网站wordpress怎么ftp建站

邮件营销效果好的莫过于QQ邮件营销,QQ邮件收件会自动弹窗提示,邮件的阅读率是所有目前邮箱中最高的,而QQ邮件规则使用的叶贝思反垃圾邮件算法会有效防止一般的群发邮件,一米智能QQ邮件营销系统针对性的解决了这个难题。另外我们对…

以下区域不属于官方网站网页设计岗位职责

项目说明本项目是我2019年7月份的实习工作的**展示与记录**:把倾斜的表格旋转水平;制作5000张表格数据集,需要标注每一个单元格,并实现单元格检测第一项比较简单,仿射变换、透视变换已经很成熟了,关键是第二…

摄影网站制作软件中国做视频网站有哪些

文章目录 Deque 介绍Deque 使用双端队列普通队列栈 总结 在 Java 中,Deque 接口是一个双端队列(double-ended queue)的数据结构,它支持在两端插入和移除元素。Deque 是 “Double Ended Queue” 的缩写,而且它可以同时充…

网站负责人核验照片o2o好网站

修剪二叉搜索树 给定一个二叉搜索树,同时给定最小边界L 和最大边界 R。通过修剪二叉搜索树,使得所有节点的值在[L, R]中 (R>L) 。你可能需要改变树的根节点,所以结果应当返回修剪好的二叉搜索树的新的根节点。 ​ 最直接的想法&#xff0…

外贸建站深圳网站关键词怎么优化排名

今日主要内容 while循环:判断条件是否成立。 如果成立执行循环体。然后再次判断条件,。。。。。直到条件不成立的时候跳出循环 语法: while 条件:   循环体 else:   当条件不成立的时候执行这里 和break没关系 break 终止当前循环 continue 停止当前…

相城网站建设商务定制网站

目录 一、资源池 pool 管理 1.创建一个 Pool 资源池 2.查看集群 Pool 信息 3.查看资源池副本的数量 4.查看 PG 和 PGP 数量 5.修改 pg_num 和 pgp_num 的数量为 128 6.修改 Pool 副本数量为 2 7.修改默认副本数为 2 8.删除 Pool 资源池 8.1修改配置文件 8.2推送 ceph…

网站建设实训教程珠海制作企业网站

一、Linux命令基础 1、ls、ll命令——展示数据 ①ls命令——平铺展示数据 其中ls命令以平铺的方式展现数据 ②ll命令——列表展示数据 ll命令以列表的方式展现数据 -a选项,表示:all的意思,即列出全部文件(包含隐藏的文件/文件夹…

c 手机网站开发工具discuz 门户网站模板

client-go是由k8s发布且维护的专门用于开发者和kubernetes交互的客户端库。它支持对k8s资源的CRUD操作(create、read、update、delete),事件监听和处理,访问kubernetes集群的上下文和配置。 client go是独立于kubernetes集群之外…

摄影师个人网站模板网站上线如何做公司名字

2024第六届环境科学与可再生能源国际会议 能源 (ESRE 2024) 即将举行 2024 年 6 月 28 日至 30 日在德国法兰克福举行。ESRE 2024 年 旨在为研究人员、从业人员和专业人士提供一个论坛 从工业界、学术界和政府到研究和 发展,环境科学领域的专…

优化网站内容3 建设营销型网站流程图

准备工作 1. 注册 npm 账号 还没有 npm 账号?去官网注册: https://www.npmjs.com 需要记住用户名、密码、邮箱,后面需要用到。 2. 查看本地 npm 镜像,如果不是默认的,需要改回来 npm config get registry重置镜像路…

58同城枣庄网站建设企业网站建设方案书模板

Docker概述 ​ —— Notes from WAX through KuangShen 准确来说,这是一篇学习笔记!!! Docker为什么出现 一款产品:开发—上线 两套环境!应用环境如何铜鼓? 开发 – 运维。避免“在我的电脑…

装修行业网站建设wordpress free cdn

目录 一、基础插件二、AI三、Rust插件 一、基础插件 Chinese (Simplified) (简体中文) 此中文(简体)语言包为 VS Code 提供本地化界面。 Native Debug 本地VSCode调试器。 CodeLLDB 一个由LLDB提供支持的本地调试器。调试c, Rust等编译语言…