12月4日的Flutter Live中,Flare动画宣布了支持Flutter!可是这么久过去了,并无相关的完的善中文教程出现,因此斗胆来写一下。主要分红两个部分来讲说Flare:一是简单讲下怎么在2dimensions
上制做Flare动画,二是怎么在Flutter中使用Flare动画。划重点!!!:若是你是程序员,而且对设计没兴趣,那么直接目录跳到第二部分就OK了。
先说下什么是Flare呢?其实就是一个在线的动画设计网站,能够为App、游戏和网页制做矢量动画模型,网址是: www.2dimensions.com 。其实After Effects也有相关的实践,像是咱们熟知的Lottie
和Bodymovin
,一套设计,就能够在iOS和Android双端实现复杂又好看的动画效果。node
首先打开2dimensions
网站:www.2dimensions.com,自行注册帐号。注册完毕后,将鼠标移动到右上角的用户头像左边Your Files
菜单,就能够看到制做动画的入口啦:android
简而言之,Flare更偏向于App和Web使用,Nima更偏向于游戏引擎使用。咱们以建立Flare为例,初始的空白工做区长这个样子:程序员
Hierarchy用树状图的形式展现了全部控件的等级关系,通常顶级结点是一个artboard,能够定义scene的尺寸、背景颜色等属性。你也能够有多个artboard,可是一个flare文件至少须要包含一个artboard。全部类型的控件均可以拥有本身的子控件,子控件会继承父控件的全部变换。
SETUP模式下会出现“+”号菜单,用来添加矢量元素,能够看到有预置的画笔、形状等等,咱们先随便新建一个形状来做为讲解例子,这里我就导入一个五角星吧: bash
(属性动画这个名字是我本身起的)属性包括了缩放、旋转、位移、透明度、颜色等等,只要右侧属性面板中带小菱形标志,我都概括到了这一类型中。
接下来,咱们试着给五角星添加一个放大的动画:首先选中五角星,而后在下边的时间轴上选择一个动画开始时间点(以2s为例),再点击右边属性面板scale属性x、y右边的透明小菱形(点击后变蓝色),底下面板就会多处一个scale动画了: app
Node顾名思义就是结点,其实就是控制点,调整node的值能够控制某部分画面的动画,它拥有基础的变换属性(移动、旋转和缩放),若是使用node做为容易,那么能够为控件添加额外的变换(好比旋转一张图片、一组图片、或者自定义旋转中心)。接下来咱们都以Google Live上的玩手机小人动画为例来说解:ide
eye_close_right
、
eye_right
、
eye_close_let
、
eye_left
等等都是结点,一个结点控制一个或多个控件的动画,好比我如今选中的这个
eye_right
,它同时控制了两个shape:右眼外边的框和里面的眼白,调整这个node,右眼外边的框和里面的眼白的属性都会跟着一块儿变化:
pupil_right
来控制的,调整它的属性,瞳孔就会相应变化。
Bone,顾名思义就是骨架,因此这个控件,通常画小人的时候用,咱们以小人的左腿为例来分析一下:动画
contected bones
,而后在左侧控件树中选择须要关联的bone,就能够啦。
咱们最开始讲了,通常来讲,子控件会继承父控件的变换,那么有没有办法让父控件的变换不影响子控件呢?这个时候咱们可使用Freeze控件将这些变换“冻住”。具体的能够看下这个例子:Freeze,操做很简单,就是选中控件,而后修改它的freeze属性就能够了。网站
设计稿画好以后,点击右上角的export按钮,就能够导出.flr
格式的资源文件啦: ui
2019.08更新:
根据最新的2dimensions编辑页面,导出文件的时候会有export和downloadFile两种选项,请必定要选择export。前者导出的是.flr
文件,然后者是.flr2d
文件,.flr2d
文件Flare暂时不支持。idea
最基础的,将flr
文件放到工程目录,而后使用FlareActor
控件来展现就能够了:
import 'package:flare_flutter/flare_actor.dart';
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => new _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
@override
Widget build(BuildContext context) {
return new FlareActor("assets/Filip.flr", alignment:Alignment.center, fit:BoxFit.contain, animation:"idle");
}
}
复制代码
但其实Flare很强大、很灵活的,flr文件里边的每个结点,都是能够获取到的,方便咱们精确地控制动画。使用artboard.getNode(String name)
能够获得一个ActorNode
对象,使用play(String animationName)
能够播放指定动画。因此知道为何让大家取名不要瞎取了吧,否则你写出来的代码可读性会不好。
若是你想要本身去控制动画,那么自定义一个controller继承自FlareControls
就能够了。注意,是FlareControls
,不是FlareController
,FlareControls
继承自FlareController
,拥有一些基础的play/mix
方法,用起来简单不少。你的自定义controller须要重写三个方法:initialize()
、advance()
和 setViewTransform()
。
initialize()
通常是作初始化操做,此时FlareActor
控件已经built好了,咱们能够在此获取node:_faceControl = artboard.getNode("ctrl_face");
play("idle");
复制代码
setViewTransform()
在动画的每一帧处都会被调用;advance()
是在每一次artboard即将刷新的时候被调用(尚未开始draw的时候)Nima的制做和使用其实和Flare大差不差的,因此就不重复写了。
2dimensions explore 上有不少现成的动画可供参考,你们能够去上边看看,有不少有意思的idea。
参考文章: