flutter开发实战-CustomClipper裁剪长图帧动画效果
flutter开发实战-CustomClipper裁剪长图帧动画效果
在开发过程中,经常遇到帧动画的每一帧图显示在超长图上,需要处理这种帧动画效果。我这里使用的是CustomClipper
一、CustomClipper
CustomClipper继承于Listenable
abstract class CustomClipper extends Listenable
我们实现CustomClipper子类来实现裁剪功能
class PicCustomClipper extends CustomClipper<Rect> {PicCustomClipper(this.rect);Rect rect;// Rect getClip(Size size) => Rect.fromLTWH(0.0, 15.0, 40.0, 30.0);Rect getClip(Size size) => rect;bool shouldReclip(CustomClipper<Rect> oldClipper) => true;
}
- getClip()是用于获取剪裁区域的接口,由于图片大小是60×60,
- 我们返回剪裁区域为Rect.fromLTWH(10.0, 15.0, 40.0, 30.0),即图片中部40×30像素的范围。
shouldReclip() 接口决定是否重新剪裁。
如果在应用中,剪裁区域始终不会发生变化时应该返回false,这样就不会触发重新剪裁,避免不必要的性能开销。
如果剪裁区域会发生变化(比如在对剪裁区域执行一个动画),那么变化后应该返回true来重新执行剪裁。
二、实现播放帧动画
CustomClipper裁剪长图后,每隔一段时间展示长图的不同区域,实现帧动画的连贯效果。
class PicFrameAnim extends StatefulWidget {const PicFrameAnim({required this.size, required this.imageSize, Key? key}): super(key: key);final Size size;final Size imageSize;_PicFrameAnimState createState() => _PicFrameAnimState();
}class _PicFrameAnimState extends State<PicFrameAnim>with TickerProviderStateMixin {late Duration _duration;late int _imageIndex;late int _currentIndex;// 定义一个裁剪late PicCustomClipper _clipper = PicCustomClipper(Rect.fromLTWH(0.0, 0.0, widget.size.width, widget.size.height));void initState() {// TODO: implement initStatesuper.initState();_duration = Duration(milliseconds: 200);_imageIndex = 1;_currentIndex = 0;if (widget.size.height > 0) {_imageIndex = (widget.imageSize.height / widget.size.height).floor();}if (_imageIndex >= 2) {updateImage();}}void updateImage() {if (_currentIndex >= _imageIndex) {_currentIndex = 0;}_clipper = PicCustomClipper(Rect.fromLTWH(0.0,_currentIndex * (widget.size.height),widget.size.width,widget.size.height));_currentIndex++;if (mounted) {setState(() {});}Future.delayed(_duration, () {if (mounted) {updateImage();}});}void dispose() {// TODO: implement disposesuper.dispose();}Matrix4 buildMatrix4() {double dx = 0;double dy = 0;///Y轴方向平移dy = -_currentIndex * (widget.size.height) + (widget.size.height);///在XOY平面的平移return Matrix4.translationValues(dx, dy, 0);}Widget build(BuildContext context) {return Container(width: widget.imageSize.width,height: widget.imageSize.height,child: Transform(///构建Matrix4transform: buildMatrix4(),///中心对齐alignment: Alignment.center,child: ClipRect(clipper: _clipper,child: buildBGArrow(context),),),);}Widget buildBGPicImage(BuildContext context) {return Image.network("https://avatars2.githubusercontent.com/u/20411648?s=460&v=4",width: 100.0,height: 300.0,
);}
}
三、小结
flutter开发实战-CustomClipper裁剪长图帧动画效果。
https://blog.csdn.net/gloryFlow/article/details/132253251
学习记录,每天不停进步。
相关文章:
flutter开发实战-CustomClipper裁剪长图帧动画效果
flutter开发实战-CustomClipper裁剪长图帧动画效果 在开发过程中,经常遇到帧动画的每一帧图显示在超长图上,需要处理这种帧动画效果。我这里使用的是CustomClipper 一、CustomClipper CustomClipper继承于Listenable abstract class CustomClipper e…...
CSS 中的优先级规则是怎样的?
聚沙成塔每天进步一点点 ⭐ 专栏简介⭐内联样式(Inline Styles)⭐ID 选择器(ID Selectors)⭐类选择器、属性选择器和伪类选择器(Class, Attribute, and Pseudo-class Selectors)⭐元素选择器和伪元素选择器…...
概率图模型(Probabilistic Graphical Model,PGM)
概率图模型(Probabilistic Graphical Model,PGM),是一种用图结构来描述多元随机变量之间条件独立性的概率模型。它可以用来表示复杂的概率分布,进行有效的推理和学习,以及解决各种实际问题,如图…...
Oracle 知识篇+会话级全局临时表在不同连接模式中的表现
标签:会话级临时表、全局临时表、幻读释义:Oracle 全局临时表又叫GTT ★ 结论 ✔ 专用服务器模式:不同应用会话只能访问自己的数据 ✔ 共享服务器模式:不同应用会话只能访问自己的数据 ✔ 数据库驻留连接池模式:不同应…...
MySQL 数据库文件的导入导出
目录 数据库的导出 导出整个数据库 导出数据库中的数据表 导出数据库结构 导出数据库中表的表结构 导出多个数据库 导出所有数据库 数据库的导入 数据库的导出 mysqldump -h IP地址 -P 端口 -u 用户名 -p 数据库名 > 导出的文件名 用管理员权限打开cmd进入MySQL的bi…...
找不到资产文件project.assets.json
NuGet 在“obj”文件夹中写入名为 project.assets.json 的文件,.NET SDK 使用该文件来获取有关要传递到编译器的包的信息 。 如果在生成过程中找不到资产文件 project.assets.json,则会发生此错误。 1.执行命令的方式解决 点击工具,分别展开命…...
【python】python将json字符串导出excel | pandas处理json字符串保存为csv
如何将json转为csv 1、通过json直接转为csv 在Python中,你可以使用pandas库来处理DataFrame(数据帧)和将JSON数据转换为CSV格式。下面是一个简单的示例代码,展示了如何使用pandas库将JSON数据转换为CSV文件: import p…...
opencv 基础54-利用形状场景算法比较轮廓-cv2.createShapeContextDistanceExtractor()
注意:新版本的opencv 4 已经没有这个函数 cv2.createShapeContextDistanceExtractor() 形状场景算法是一种用于比较轮廓或形状的方法。这种算法通常用于计算两个形状之间的相似性或差异性,以及找到最佳的匹配方式。 下面是一种基本的比较轮廓的流程&…...
分布式系统理论
以前的架构...
Gartner发布2023年的存储技术成熟曲线
技术路线说明 Gartner自1995年起开始采用技术成熟度曲线,它描述创新的典型发展过程,即从过热期发展到幻灭低谷期,再到人们最终理解创新在市场或领域内的意义和角色。 一项技术 (或相关创新)在发展到最终成熟期的过程中经历多个阶段࿱…...
c++ 有元
友元分为两部分内容 友元函数友元类 友元函数 问题:当我们尝试去重载operator<<,然后发现没办法将operator<<重载成成员函数。因为cout的输出流对象和隐含的this指针在抢占第一个参数的位置。this指针默认是第一个参数也就是左操作 数了。…...
安卓:网络框架okhttp
目录 一、okhttp介绍 1. OkHttpClient类: 常用方法: 2. Request类: 常用方法: 3. Response类: 常用方法: 4. Call类: 常用方法: 5. Interceptor接口: 常用方法&…...
Python爬虫 爬取图片
在我们日常上网浏览网页的时候,经常会看到一些好看的图片,我们就希望把这些图片保存下载,或者用户用来做桌面壁纸,或者用来做设计的素材。 我们最常规的做法就是通过鼠标右键,选择另存为。但有些图片鼠标右键的时候并没…...
【云原生】Pod详讲
目录 一、Pod基础概念1.1//在Kubrenetes集群中Pod有如下两种使用方式:1.2pause容器使得Pod中的所有容器可以共享两种资源:网络和存储。1.3kubernetes中的pause容器主要为每个容器提供以下功能:1.4Kubernetes设计这样的Pod概念和特殊组成结构有…...
先进先出的队
文章目录 队列特点队列实现 队列特点 先进先出,后进后出 队列实现 queue.c#define _CRT_SECURE_NO_WARNINGS 1 #include"Queue.h" //初始化 void QueInit(Queue* pq) {assert(pq);pq->head NULL;pq->tail NULL;pq->size 0; } //入队&#…...
怎样学会单片机
0、学单片机首先要明白,一个单片机啥也干不了,学单片机的目的是学习怎么用单片机驱动外部设备,比如数码管,电机,液晶屏等,这个需要外围电路的配合,所以学习单片机在这个层面上可以等同为学习单片…...
数据结构笔记--常见二叉树分类及判断实现
目录 1--搜索二叉树 2--完全二叉树 3--平衡二叉树 4--满二叉树 1--搜索二叉树 搜索二叉树的性质:左子树的节点值都比根节点小,右子树的节点值都比根节点大; 如何判断一颗二叉树是搜索二叉树? 主要思路: 递归自底向…...
docker小白第二天
centos上安装docker docker官网,docker官网,找到下图中的doc文档。 进入如下页面 选中manuals,安装docker引擎。 最终centos下的docker安装文档链接:安装文档链接. 具体安装步骤: 1、打开Centos,输入命…...
【变形金刚03】使用 Pytorch 开始构建transformer
一、说明 在本教程中,我们将使用 PyTorch 从头开始构建一个基本的转换器模型。Vaswani等人在论文“注意力是你所需要的一切”中引入的Transformer模型是一种深度学习架构,专为序列到序列任务而设计,例如机器翻译和文本摘要。它基于自我注意机…...
「Web3大厂」价值70亿美元的核心竞争力
经过近 5 年的研发和酝酿,Linea 团队在 7 月的巴黎 ETHCC 大会期间宣布了主网 Alpha 的上线,引起了社区的广泛关注。截止 8 月 4 日,据 Dune 数据信息显示,其主网在一周内就涌入了 100 多个生态项目,跨入了超 2 万枚 E…...
Kazumi番剧采集应用完全指南:如何免费观看高清动漫与实时弹幕
Kazumi番剧采集应用完全指南:如何免费观看高清动漫与实时弹幕 【免费下载链接】Kazumi 基于自定义规则的番剧采集APP,支持流媒体在线观看,支持弹幕,支持实时超分辨率。 项目地址: https://gitcode.com/gh_mirrors/ka/Kazumi …...
从零实战:手把手教你编写USB键盘驱动
1. USB键盘驱动开发基础 要开发一个USB键盘驱动,首先需要理解USB HID(Human Interface Device)类设备的工作原理。USB键盘属于HID设备的一种,它通过中断传输方式与主机通信。当你在键盘上按下或释放按键时,键盘会通过U…...
天赐范式第16天:【硬核反骨】哥本哈根沉默:REM睡眠是大脑在50维相空间的“超决定论”搜索(附Python源码)
摘要:梦境不是随机的噪声,而是意识在混沌边缘的精确计算。本文基于 Kuramoto 高维耦合振子模型,利用纯 Python (NumPy) 模拟了快速动眼期(REM)的神经动力学。实验发现:系统在 李雅普诺夫指数 λ0.0086 的弱…...
Excel插件开发实战:从零封装一个带自定义Ribbon的.xlam插件(含完整代码与避坑点)
Excel插件开发实战:从零封装带自定义Ribbon的.xlam插件 在数据分析与财务工作中,Excel插件能显著提升重复性任务的效率。本文将完整演示如何开发一个带有自定义功能区的专业级Excel插件,涵盖从空白文件创建到最终分发的全流程。不同于简单的宏…...
Rust的trait对象大小限制与dynTrait在类型擦除中的内存布局影响
Rust作为一门强调零成本抽象的现代系统编程语言,其trait对象与动态分发机制一直是开发者关注的焦点。特别是当使用dyn Trait进行类型擦除时,trait对象的大小限制与内存布局会直接影响程序的性能与设计模式。理解这些底层机制不仅能帮助开发者规避常见陷阱…...
【C++】中INI配置文件读取技术详解
一、INI文件格式概述 INI(Initialization)是一种简单的配置文件格式,广泛用于存储应用程序的配置信息。其结构清晰,易于人工编辑和程序解析。 1.1 基本结构 ; 这是注释,以分号开头 [SectionName] ; 节&#x…...
告别复杂环境!用C# Winform + OpenCVSharp4 5分钟搞定一个桌面人脸识别小工具
5分钟极速开发:用C# Winform OpenCVSharp4打造桌面人脸识别工具 想象一下这样的场景:周一晨会上,产品经理突然提出需要一个能在Windows电脑上运行的人脸识别演示工具,要求周三前完成原型演示。作为C#开发者的你,如何在…...
终极指南:Fiji图像分析工具快速入门与高效使用秘籍 [特殊字符]
终极指南:Fiji图像分析工具快速入门与高效使用秘籍 🚀 【免费下载链接】fiji A "batteries-included" distribution of ImageJ :battery: 项目地址: https://gitcode.com/gh_mirrors/fi/fiji Fiji作为一款功能强大的科学图像分析工具&a…...
用Rust构建Windows虚拟显示驱动:从原理到实战应用
用Rust构建Windows虚拟显示驱动:从原理到实战应用 【免费下载链接】virtual-display-rs A Windows virtual display driver to add multiple virtual monitors to your PC! For Win10. Works with VR, obs, streaming software, etc 项目地址: https://gitcode.co…...
三步解锁QQ音乐加密格式:qmc-decoder让你的音乐收藏重获自由
三步解锁QQ音乐加密格式:qmc-decoder让你的音乐收藏重获自由 【免费下载链接】qmc-decoder Fastest & best convert qmc 2 mp3 | flac tools 项目地址: https://gitcode.com/gh_mirrors/qm/qmc-decoder 你是否曾在QQ音乐下载了心爱的歌曲,却发…...
