当前位置: 首页 > news >正文

flutter开发实战-实现左右来回移动的按钮引导动画效果

flutter开发实战-实现左右来回移动的按钮引导动画效果

最近开发过程中需要实现左右来回移动的按钮引导动画效果

在这里插入图片描述

一、动画

AnimationController用来控制一个或者多个动画的正向、反向、停止等相关动画操作。在默认情况下AnimationController是按照线性进行动画播放的。AnimationController两个监听Listener如下

  • addListener
    addListener();它可以用于给Animation添加帧监听器,在每一帧都会被调用。帧监听器中最常见的行为是改变状态后调用setState()来触发UI重建。

  • addStatusListener
    addStatusListener();它可以给Animation添加“动画状态改变”监听器;动画开始、结束、正向或反向(见AnimationStatus定义)时会调用状态改变的监听器。

二、实现左右来回移动的按钮引导动画效果

在使用动画时候需要TickerProviderStateMixin或者SingleTickerProviderStateMixin
当需要多个Animation,则使用TickerProviderStateMixin

注意:在使用AnimationController的时候需要结合TickerProvider,因为只有在TickerProvider下才能配置AnimationController中的构造参数vsync。TickerProvider是一个抽象类,所以我们一般使用它的实现类TickerProviderStateMixin和SingleTickerProviderStateMixin。

实现左右来回移动的按钮引导动画效果代码效果

import 'package:flutter/material.dart';class ShakeContainer extends StatefulWidget {const ShakeContainer({required this.child, Key? key}) : super(key: key);final Widget child;@override_ShakeContainerState createState() => _ShakeContainerState();
}class _ShakeContainerState extends State<ShakeContainer>with SingleTickerProviderStateMixin {late AnimationController _animationController;late Animation<double> _animation;@overridevoid initState() {// TODO: implement initStatesuper.initState();_animationController =AnimationController(vsync: this, duration: Duration(milliseconds: 600));//使用弹性曲线_animation =CurvedAnimation(parent: _animationController, curve: Curves.easeOut);_animation = Tween(begin: 0.0, end: 1.0).animate(_animation);_animationController.addListener(() {if (mounted) {setState(() {});}});_animationController.addStatusListener((status) {if (status == AnimationStatus.completed) {_animationController.reverse();} else if (status == AnimationStatus.dismissed) {_animationController.forward();}});_animationController.forward();}void animationDispose() {_animationController.dispose();}@overridevoid dispose() {// TODO: implement disposeanimationDispose();super.dispose();}@overrideWidget build(BuildContext context) {return Container(alignment: Alignment.center,child: Transform(///构建Matrix4transform: buildMatrix4(),///中心对齐alignment: Alignment.center,child: widget.child,),);}Matrix4 buildMatrix4() {double dx = 0;double dy = 0;///x轴方向平移dx = _animation.value * 60;return Matrix4.translationValues(dx, dy, 0);}
}/// 左右摆动的心
class HeartItem extends StatelessWidget {const HeartItem({Key? key}): super(key: key);@overrideWidget build(BuildContext context) {return Container(width: 200.0,height: 150.0,alignment: Alignment.center,child: Image.asset("assets/images/touch_here.png",width: 200.0,height: 150,),);}
}

在代码中用到了Matrix4.translationValues(dx, dy, 0); 可以在指定的x、或者y轴方向平移。

在这里插入图片描述

三、小结

flutter开发实战-实现左右来回移动的按钮引导动画效果。
学习记录,每天不停进步。

相关文章:

flutter开发实战-实现左右来回移动的按钮引导动画效果

flutter开发实战-实现左右来回移动的按钮引导动画效果 最近开发过程中需要实现左右来回移动的按钮引导动画效果 一、动画 AnimationController用来控制一个或者多个动画的正向、反向、停止等相关动画操作。在默认情况下AnimationController是按照线性进行动画播放的。Animati…...

ROS实现自定义信息以及使用

常见的消息包 消息包定义一般如下&#x1f447; &#xff08;1&#xff09;创建包和依赖项 &#xff08;2&#xff09;在新建的qq_msgs的包新建msgs的文件夹&#xff0c;在该文件夹里面新建Carry.msg类型的文件。 其实&#xff0c;Carry.msg就是你自己定义的消息类型&am…...

初始C语言——详细讲解操作符以及操作符的易错点

系列文章目录 第一章 “C“浒传——初识C语言&#xff08;更适合初学者体质哦&#xff01;&#xff09; 第二章 详细认识分支语句和循环语句以及他们的易错点 第三章 初阶C语言——特别详细地介绍函数 第四章 初始C语言——详细地讲解数组的内容以及易错点 第五章 初始C语言—…...

论文写作常用词句积累

X 连接词 表目的To this end/Toward that endto do soto this aimso as toTo tackle these issuesfor the sake ofaiming to do表转折howeverNevertheless表递进moreverFurthermore表对比on the other hand/On the contraryAlternativelyas in the case ofwhereas表顺序in a f…...

伺服系统::编码器

一、主要分类 二、组成与原理 光电编码器 磁编码器&#xff1a;N-->磁感元件&#xff08;0&#xff09;&#xff1b;S-->磁感元件&#xff08;1&#xff09;》脉冲 增量编码器的分辨率、倍频与细分技术 (99 封私信 / 81 条消息) 编码器有什么分类&#xff1f; - 知乎 (z…...

计算机网络 数据链路层 虚拟局域网 VLAN

...

Git全栈体系(五)

第八章 IDEA 集成 GitHub 一、设置 GitHub 账号 如果出现 401 等情况连接不上的&#xff0c;是因为网络原因&#xff0c;可以使用以下方式连接&#xff1a; 然后去 GitHub 账户上设置 token。 点击生成 token。 复制红框中的字符串到 idea 中。 点击登录。 二、分享工程…...

spring-boot webservice的例子

webservice发布服务 源码下载地址 spring-boot-webservice例子资源-CSDN文库 webservice cilent调用 源码下载地址 spring-boot-clintwebservice调用服务的例子资源-CSDN文库...

第八章 SpringBoot @ConfigurationProperties配置绑定

原始做法&#xff1a;读取到文件内容&#xff0c;再进行bean的绑定 public static void readProperties(String propertiesPath) throws IOException {Properties pps new Properties();pps.load(MainApplication.class.getClassLoader().getResourceAsStream("applicat…...

【SpringBoot】88、SpringBoot中使用Undertow替代Tomcat容器

SpringBoot 中我们既可以使用 Tomcat 作为 Http 服务,也可以用 Undertow 来代替。Undertow 在高并发业务场景中,性能优于 Tomcat。所以,如果我们的系统是高并发请求,不妨使用一下 Undertow,你会发现你的系统性能会得到很大的提升。 1、Tomcat 介绍 Tomcat是一个开源的Ja…...

java8 求和

1.BigDecimal求和 对象字段求和 List<Car> listnew ArrayList<>(); BigDecimal sumOfBigDecimals list.stream().filter(Objects::nonNull).filter(c -> c.getMiles() ! null).map(Car::getMiles).reduce(BigDecimal.ZERO, BigDecimal::add);BigDecimal集合求…...

手眼标定眼在手上

1、为什么要用手眼标定 参考手眼标定特别是眼在手上在网上的文章很多&#xff0c;但很多在实际中调试不通。在定位时候&#xff0c;往往希望相机能返回的是机械的世界坐标&#xff0c;而不是相机的的图像坐标。从而间接计算出相机坐标系与机械坐标世界坐标转换矩阵&#xff0c…...

【数据结构】初始二叉树

满二叉树 每个结点都有左右子树的二叉树。 完全二叉树 从上到下、从左到右排列&#xff0c;不落下一个结点进行排列的二叉树。 二叉树的性质 第i层最多有2(i-1)个结点深度为k的二叉树最多有 2k-1 个结点因为一颗深度为k的满二叉树的结点有2k-1&#xff0c;即nk-1&#xff…...

创建和使用角色(RHCE)

题目&#xff1a; 创建和使用角色 根据下列要求&#xff0c;在 /home/curtis/ansible/roles 中创建名为 apache 的角色&#xff1a; httpd 软件包已安装&#xff0c;设为在系统启动时启用并启动 防火墙已启用并正在运行&#xff0c;并使用允许访问 Web 服务器的规则 模板文件 i…...

Leetcode 583 两个字符串的删除操作(经典)

【问题描述】 给定两个单词 word1 和 word2 &#xff0c;返回使得 word1 和 word2 相同所需的最小步数。 每步 可以删除任意一个字符串中的一个字符。 示例 1&#xff1a; 输入: word1 "sea", word2 "eat" 输出: 2 解释: 第一步将 "sea" 变为…...

c#实现工厂模式

可以使用以下代码实现C#中的工厂模式&#xff1a; 首先&#xff0c;定义一个接口作为产品的抽象&#xff1a; public interface IProduct {void Operation(); }然后&#xff0c;创建具体的产品类&#xff1a; public class ConcreteProductA : IProduct {public void Operat…...

c#在设计时调试自定义 Windows 窗体控件

private string demoStringValue null; [Browsable(true)] public string DemoString {get{return this.demoStringValue;}set{demoStringValue value;} } 参考链接 在设计时调试自定义控件 - Windows Forms .NET Framework | Microsoft Learnhttps://learn.microsoft.com/z…...

Ajax 笔记(二)—— Ajax 案例

笔记目录 2. Ajax 综合案例2.1 案例一-图书管理2.1.1 渲染列表2.1.2 新增图书2.1.3 删除图书2.1.4 编辑图书 2.2 案例二-背景图的上传和更换2.2.1 上传2.2.2 更换 2.3 案例三-个人信息设置2.3.1 信息渲染2.3.2 头像修改2.2.3 信息修改2.3.4 提示框 Ajax 笔记&#xff1a; Ajax…...

微信小程序隐私协议模板

在 设置 中找到 用户隐私保护 进行更新&#xff0c;如下图&#xff1a; 具体协议补充可参考如下&#xff1a; 为了分辨用户&#xff0c;开发者将在获取你的明示同意后&#xff0c;收集你的微信昵称、头像 为了显示距离&#xff0c;开发者将在获取你的明示同意后&#xff0c;收…...

Three.js WebXR沉浸式渲染简明教程

在前面文章中&#xff0c;我们了解了 VR 概念以及它们如何在 WebXR 中映射。 这使你可以考虑想要为用户提供的体验。 在本文中&#xff0c;我们将介绍如何将 WebXR 与 Three.JS 结合使用来创建针对大型异构用户群的沉浸式体验。 警告&#xff1a;WebXR API 仍在完善中&#xf…...

魔兽争霸3游戏体验终极优化:WarcraftHelper完整使用指南

魔兽争霸3游戏体验终极优化&#xff1a;WarcraftHelper完整使用指南 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 你是否还在为魔兽争霸3的老旧限制…...

Keras活动正则化:原理、实现与调优指南

1. 理解泛化误差与活动正则化在深度学习模型训练过程中&#xff0c;我们经常会遇到一个关键挑战&#xff1a;模型在训练集上表现良好&#xff0c;但在未见过的测试数据上表现不佳。这种现象被称为"泛化误差"(generalization error)过大&#xff0c;也就是模型过拟合(…...

【2026量子开发必装插件】:VSCode原生支持Q# v1.4+、OpenQASM 4.0与Quil 3.2高亮(仅限前2000名获微软量子实验室白名单认证)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;VSCode 2026量子编程语法高亮概览 VSCode 2026 引入了原生支持量子编程语言&#xff08;Q#、OpenQASM 3.0、Quil&#xff09;的语法高亮引擎&#xff0c;基于 LSP 1.20 协议与量子语义分析器深度集成&a…...

茉莉花插件:3步解决Zotero中文文献管理的世纪难题

茉莉花插件&#xff1a;3步解决Zotero中文文献管理的世纪难题 【免费下载链接】jasminum A Zotero add-on to retrive CNKI meta data. 一个简单的Zotero 插件&#xff0c;用于识别中文元数据 项目地址: https://gitcode.com/gh_mirrors/ja/jasminum 如果你是一名中文科…...

集成学习与随机森林算法详解

1. 集成学习基础与Bagging算法解析在机器学习领域&#xff0c;单个模型的表现往往存在局限性&#xff0c;就像一支独奏乐器难以演绎交响乐的丰富层次。集成学习(Ensemble Learning)通过组合多个基础模型&#xff0c;能够显著提升预测的准确性和鲁棒性。Bagging(Bootstrap Aggre…...

Antigravity Workflows:让AI编程助手真正理解你的技术栈

1. 项目概述&#xff1a;为AI编程助手注入“灵魂”的智能工作流 如果你和我一样&#xff0c;每天都在和Claude、Cursor、GitHub Copilot这类AI编程助手打交道&#xff0c;那你肯定也经历过那种“鸡同鸭讲”的无力感。你让它“写个登录组件”&#xff0c;它可能给你生成一个Rea…...

MAgent多智能体强化学习平台:从原理到实战的完整指南

1. 项目概述&#xff1a;从单智能体到多智能体世界的桥梁如果你玩过《星际争霸》或者《文明》这类策略游戏&#xff0c;一定对“微操”和“宏观运营”这两个词不陌生。在游戏里&#xff0c;你控制的不是一个单位&#xff0c;而是一整个军团&#xff0c;每个单位都有自己的行动逻…...

2025全新升级版|免登录H5商城源码|抖音直播带货系统|手机端主播电商商城

温馨提示&#xff1a;文末有联系方式全面升级&#xff5c;2025新版多端融合电商源码正式发布 2025全新迭代版本已上线&#xff01;本套源码深度适配短视频与私域电商趋势&#xff0c;涵盖免登录轻量级H5商城、抖音小店对接系统、主播专属带货后台及响应式手机商城&#xff0c;一…...

Golang如何做秒杀系统_Golang秒杀系统教程【收藏】

用 redis.Decr 原子扣库存&#xff0c;避免 SQL 分步校验导致超卖&#xff1b;配合 SETNX 实现幂等下单&#xff1b;设置 key 过期时间并及时 Incr 回滚&#xff1b;禁用本地缓存与数据库唯一索引防重。用 redis.Decr 原子扣库存&#xff0c;别写两行 SQL高并发下超卖或秒杀失败…...

微信聊天记录永久保存终极方案:无需越狱,完整导出文字、语音、图片

微信聊天记录永久保存终极方案&#xff1a;无需越狱&#xff0c;完整导出文字、语音、图片 【免费下载链接】WeChatExporter 一个可以快速导出、查看你的微信聊天记录的工具 项目地址: https://gitcode.com/gh_mirrors/wec/WeChatExporter 你是否曾经因为更换手机而丢失…...