返回顶部
首页 > 资讯 > 精选 >Flutter怎么实现笑嘻嘻的动态表情
  • 856
分享到

Flutter怎么实现笑嘻嘻的动态表情

2023-06-30 09:06:17 856人浏览 独家记忆
摘要

这篇文章主要介绍“Flutter怎么实现笑嘻嘻的动态表情”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Flutter怎么实现笑嘻嘻的动态表情”文章能帮助大家解决问题。效果如下图所示AnimatedC

这篇文章主要介绍“Flutter怎么实现笑嘻嘻的动态表情”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Flutter怎么实现笑嘻嘻的动态表情”文章能帮助大家解决问题。

效果如下图所示

Flutter怎么实现笑嘻嘻的动态表情

AnimatedContainer 介绍

在实现之前,先介绍一个新组件 —— AnimatedContainer 。看这个名字就知道和 Container 有关,实际上AnimatedContainer是 Flutter 中的一个动画容器Container 有的属性基本上它都有,我们看一下二者的构造方法的区别。

AnimatedContainer({    Key? key,    this.alignment,    this.padding,    Color? color,    Decoration? decoration,    this.foregroundDecoration,    double? width,    double? height,    BoxConstraints? constraints,    this.margin,    this.transfORM,    this.transformAlignment,    this.child,    this.clipBehavior = Clip.none,    Curve curve = Curves.linear,    required Duration duration,    VoidCallback? onEnd,  });Container({    Key? key,    this.alignment,    this.padding,    this.color,    this.decoration,    this.foregroundDecoration,    double? width,    double? height,    BoxConstraints? constraints,    this.margin,    this.transform,    this.transformAlignment,    this.child,    this.clipBehavior = Clip.none,  });

可以看到,实际上 AnimatedContainer 和 Container 只差了3个属性,而这三个属性就是控制动画的参数:

  • curve:动画曲线,默认是线性;

  • duration:动效时长参数;

  • onEnd:动效结束后的回调方法。

AnimatedContainer的特性是所有涉及外观的属性都会生成一个过渡动效,当这些外观属性发生改变的时候就会使用生成的的动效来完成过渡,从而展现出动画效果。像我们要实现的笑嘻嘻的表情其实就是利用 AnimatedContainer 实现的。

组件结构

我们的笑嘻嘻动效,底部是一个圆形脑袋,上面有两颗眼睛和一个嘴巴,其中眼睛和嘴巴有移动动效,而眼睛的眼珠还有方向的动效。这些动效都可以使用AnimatedContainer来实现。大的页面结构如下:

Flutter怎么实现笑嘻嘻的动态表情

细节实现

脑袋这个很容易,直接用原型裁剪,设置尺寸和底色即可:

// 脑袋ClipOval(  child: Container(    width: 120,    height: 120,    color: Colors.blue,  ),),

眼睛左眼和右眼有点不一样,眼球实际就是AnimatedContainer使用 borderRadius 裁剪为圆形,而眼珠是AnimatedContainer的子组件 —— 黑色的圆圈。具体实现向左或向右看使用一个变量 seeLeft 控制,而向左向右的转换过渡效果都由 AnimatedContainer 控制。

  • seeLeft = true,向左看:眼珠对齐的方式是 bottomLeft,左眼纵向方向上稍微往下移一点;右眼往左移动一定的位置,这样就会有向左看的效果了;

  • seeLeft = false,向右看:眼珠对齐的方式是 bottomRight,右眼纵向方向上稍微往下移一点;左眼往右移动一定的位置,这样就会有向右看的效果了;

实现代码如下:

// 左眼Positioned(  top: marginTop,  left: marginLR,  child: AnimatedContainer(    alignment:        seeLeft ? Alignment.bottomLeft : Alignment.bottomRight,    padding: EdgeInsets.all(eyePadding),    transform: Matrix4.identity()      ..translate(          seeLeft ? 0.0 : sideOffset, seeLeft ? eyeOffset : 0.0, 0),    duration: Duration(seconds: 1),    curve: Curves.fastOutSlowIn,    width: eyeSize,    height: eyeSize,    decoration: BoxDecoration(      color: Colors.white,      borderRadius: BorderRadius.circular(eyeSize / 2),    ),    child: ClipOval(      child: Container(        color: Colors.black,        width: eyeBallSize,        height: eyeBallSize,      ),    ),  ),),// 右眼Positioned(  top: marginTop,  right: marginLR,  child: AnimatedContainer(    alignment:        seeLeft ? Alignment.bottomLeft : Alignment.bottomRight,    padding: EdgeInsets.all(eyePadding),    transform: Matrix4.identity()      ..translate(seeLeft ? -sideOffset : 0.0,          seeLeft ? 0.0 : eyeOffset, 0),    duration: Duration(seconds: 1),    curve: Curves.fastOutSlowIn,    width: eyeSize,    height: eyeSize,    decoration: BoxDecoration(      color: Colors.white,      borderRadius: BorderRadius.circular(eyeSize / 2),    ),    child: ClipOval(      child: Container(        color: Colors.black,        width: eyeBallSize,        height: eyeBallSize,      ),    ),  ),),

这里的眼珠对齐使用的就是AnimatedContainer 的 alignment参数控制,而眼球的位置使用 Matrix4 的平移实现:

Matrix4.identity()  ..translate(seeLeft ? -sideOffset : 0.0, seeLeft ? 0.0 : eyeOffset, 0),

笑脸的实现使用ClipPath,绘制两条弧线就可以了,然后平移的幅度和眼珠保持一致,就可以感觉是转头的效果了,AnimatedContainer 部分的代码如下:

// 笑嘻嘻的嘴巴Positioned(  bottom: 10,  height: 40,  left: 0,  child: AnimatedContainer(    alignment:        seeLeft ? Alignment.bottomLeft : Alignment.bottomRight,    padding: EdgeInsets.all(4.0),    transform: Matrix4.identity()      ..translate(seeLeft ? 25.0 : 35.0, 0, 0),    duration: Duration(seconds: 1),    curve: Curves.fastOutSlowIn,    child: ClipPath(      clipper: SmileClipPath(),      child: Container(        width: 60,        height: 40,        color: Colors.yellow,      ),    ),  ),),

笑嘻嘻的嘴巴的裁剪类 SmileClipPath 代码如下:

class SmileClipPath extends CustomClipper<Path> {  @override  Path getClip(Size size) {    return Path()      ..moveTo(0, 0)      ..arcToPoint(        Offset(size.width, 0),        radius: Radius.circular(size.width * 0.55),        clockwise: false,      )      ..arcToPoint(        Offset(0, 0),        radius: Radius.circular(size.width),        clockwise: true,      );  }  @override  bool shouldReclip(covariant CustomClipper<Path> oldClipper) {    return false;  }}

最后,控制状态变量 seeLeft 的变化通过一个按钮点击触发就好了。

floatingActionButton: FloatingActionButton(  child: Icon(Icons.play_arrow, color: Colors.white),  onPressed: () {    setState(() {      seeLeft = !seeLeft;    });  },),

最终运行效果如下,完整代码已提交至:动画相关代码。

Flutter怎么实现笑嘻嘻的动态表情

关于“Flutter怎么实现笑嘻嘻的动态表情”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网精选频道,小编每天都会为大家更新不同的知识点。

--结束END--

本文标题: Flutter怎么实现笑嘻嘻的动态表情

本文链接: https://lsjlt.com/news/327954.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Flutter怎么实现笑嘻嘻的动态表情
    这篇文章主要介绍“Flutter怎么实现笑嘻嘻的动态表情”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Flutter怎么实现笑嘻嘻的动态表情”文章能帮助大家解决问题。效果如下图所示AnimatedC...
    99+
    2023-06-30
  • Flutter实现笑嘻嘻的动态表情的示例代码
    目录前言AnimatedContainer 介绍组件结构细节实现总结前言 身在孤岛有很多无奈,比如说程序员属于比较偏门的职业。尤其是早些年,在行业里跳过几次槽后,可能你就已经认识整个...
    99+
    2024-04-02
  • 怎么用canvas画一个微笑的表情
    这篇文章主要介绍怎么用canvas画一个微笑的表情,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!实习期间让我用canvas画一个表情,比较简单,话不多说直接上代码:<body><div i...
    99+
    2023-06-09
  • Element怎么实现动态表格
    本篇内容介绍了“Element怎么实现动态表格”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!目录【代码背景】【代码实现】#1# -> ...
    99+
    2023-06-20
  • JavaScript怎么实现动态表格
    JavaScript怎么实现动态表格,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。JavaScript实现动态表格(改建版,代码见最下面)基本效果如下点击添加,...
    99+
    2023-06-28
  • Vue 动态路由的实现详情
    前言: 动态路由是一个常用的功能,根据后台返回的路由json表,前端动态显示可跳转的路由项,下面来讲解一下具体的实现方式: 大致业务需求:前端在login登陆页,输入账号密码后,点击...
    99+
    2024-04-02
  • mybatis plus怎么实现动态表名
    Mybatis Plus 可以通过使用 TableNameParser 接口来实现动态表名。你需要自定义一个实现了 TableNameParser 接口的类,并在 Mybatis Plus 的配置中将其注册为自定义的 TableNamePa...
    99+
    2023-09-03
    mybatis java mysql 开发语言 数据库
  • JavaScript怎么实现生成动态表格和动态效果
    本篇内容介绍了“JavaScript怎么实现生成动态表格和动态效果”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!代码:<!DOCTYP...
    99+
    2023-06-29
  • qt表格动态刷新怎么实现
    要实现Qt表格的动态刷新,可以采取以下几个步骤: 创建一个QTableWidget对象,并初始化表格的行数和列数。 QTable...
    99+
    2023-10-26
    qt
  • MySQL中怎么实现动态表维护
    在MySQL中实现动态表维护通常可以使用存储过程或者触发器来实现。以下是一种基本的方法来实现动态表维护: 创建一个存储过程,该存储...
    99+
    2024-04-30
    MySQL
  • Matlab怎么实现动态表白图的绘制
    这篇文章主要介绍了Matlab怎么实现动态表白图的绘制的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Matlab怎么实现动态表白图的绘制文章都会有所收获,下面我们一起来看看吧。提前祝女朋友节日快乐1 展现这里没...
    99+
    2023-06-30
  • Flutter Component动画的显和隐怎么实现
    这篇文章主要讲解了“Flutter Component动画的显和隐怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Flutter Component动画的显和隐怎么...
    99+
    2023-07-05
  • Python中怎么制作一个微信动态表情符
    Python中怎么制作一个微信动态表情符,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1.微笑微笑的表情符是微信中第一个表情符,它呈现出的是一种完全的轴对称的状态,因此在绘制的...
    99+
    2023-06-15
  • 利用Struts怎么实现一个动态表单
    今天就跟大家聊聊有关利用Struts怎么实现一个动态表单,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1.手动进行定义<form-beans > <form-bea...
    99+
    2023-05-31
    struts st
  • Flink中动态表上的连续查询怎么实现
    这篇文章主要介绍了Flink中动态表上的连续查询怎么实现,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。用SQL分析数据流越来越多的公司在采用流处理技术,并将现有的批处理应用程...
    99+
    2023-06-19
  • avue-crud多级复杂的动态表头怎么实现
    这篇文章主要讲解了“avue-crud多级复杂的动态表头怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“avue-crud多级复杂的动态表头怎么实现”吧!Avue.js 是基于现有的e...
    99+
    2023-06-25
  • Vue中怎么实现动态表格的排序功能
    这篇文章主要介绍“Vue中怎么实现动态表格的排序功能”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Vue中怎么实现动态表格的排序功能”文章能帮助大家解决问题。首先,为了实现动态表格的排序,我们需要一...
    99+
    2023-07-06
  • MyBatis的动态SQL怎么实现
    MyBatis提供了一种非常方便的方式来实现动态SQL,通过使用XML的方式来编写SQL语句,并在其中使用一些特定的标签来实现动态S...
    99+
    2024-04-09
    MyBatis
  • flutter怎么实现头部tabTop滚动栏
    这篇文章主要介绍了flutter怎么实现头部tabTop滚动栏的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇flutter怎么实现头部tabTop滚动栏文章都会有所收获,下面我们一起来看看吧。效果图如下:mai...
    99+
    2023-06-29
  • Flutter怎么实现滚动选择数字
    这篇“Flutter怎么实现滚动选择数字”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Flutter怎么实现滚动选择数字”文...
    99+
    2023-06-29
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作