这是我参与更文应战的第19天,活动概略查看: 更文应战

fluro 转场动画源码
在运用自界说转场动画前,先扒一扒 fluro 的源码,经过源码能够发动画制造软件现这么一个标准的转场办法:

RouteTransitionsBuilder _standardTransitionsBuilder(
T弧度与视点的转换公式ransitionType? transitionType) {
return (BuildContext context, Animation<double> animation,
Animation<double> secon弧度和视点的换算daryAnimati源码资本on, Widget child) {
if (transitionType == TransitionType.fadeIn) {源码之家
return FadeTransition(opacity: animation, child: child);
} else {
const Offset topLeft = const Offset(0.0, 0.0);
const Offset topRight = const Offset(1.0, 0.0);
co弧度制与视点制的换算公式nst Offset bottomLeft = const Offset(0.0, 1.0);
Offset sta弧度和视点的换算rtOffset = bottom源码是什么意思Left;
Offset endOffset = topLeft;
if (transition弧度的计算公式Type == TransitionType.inFromLeft) {
startOffset = con弧度制与视点制的换算公式st Offset(-1.0, 0.0);
endOffset = topLeft;
} else if (transitionType == TransitionType.动画inFromRight) {
startOffset = topRight弧度与视点的转换公式;
endOffset = topLeft;
} eflutter结构优缺点lse if (transitionType == TransitionType.inFromBottom) {弧度制
starflutter怎样读音发音tOffset = bottomLeft;
endOffset = topLeft;
} else if (transitionType == TransitionType.inFromTop) {
startOffset = Offs动画片猫和老鼠et(0.0, -1.0);
endOffset = topLeft;
}
return SlideTransition(
position: Tween<Offset&g源码编辑器手机版下载t;(
begin: star源码是什么意思tOffset,
end: endOff弧度数set,
).animate(animation),
child: child,
);
}
};
}

从源码能够看出,依据不同枚举回来了不同的动画(即 transitionB弧度的计算公式uilder),其间TransitionType.fadeIn运用的是Flutter 自带的 FadeTransition,经过改动透明度来结束动画。而其他的左滑入、右滑入、下滑入和上滑入都是从初始偏移方位滑动到完毕方位源码年代,运用的是 SlideTransition。Flutter 除了上述的 FadeTransitionSlideTransition 之外,还有如下的常用转场办法:

  • RotationTransition:旋转转场
  • ScaleTransition:缩放转场

既然是这flutter菜鸟教程样,咱们能够依葫芦画瓢,先用体系其他的转场作用做一个自界说的转场看看。

旋转转场动画

先来看看旋转的动画大放映转场RotationTransition,RotationTransition 的结构办法界说如下:

const RotationTransition({
Key? key,
requir源码ed Animation<double> turns,
this.alignment = Align源码编辑器手机版下载ment.center,
this.child,
})  : assert(turns != null),
super(key: key, listenable: turns);

其间 turns 是动flutter中文网画控制,标明旋转的弧度数,等于动画控制值乘以2。alignment 标明旋转环绕的中心方位,默许是居中的。旋转的弧弧度的计算公式度不要太大,不然动画过快,导致不太漂亮,经过验证,引荐的起始值0.2至0.3之间,完毕值为0标明回到正常方位。起始值假设为负,则是顺时针;假设为正则是逆时针,示例代码如下:

//逆时针环绕中心旋转
RouterManager.源码年代router.navigateTo(
context,
RouterManager.transitionPath,
transition: TransitionType.custom,
transitionBuilder:
(context, animation, secondaryAnimation,源码交易网站源码 child) {
return RotationTransition(
turns: Tween<double>(
begin: 0.25,
end: 0.0,
).animate(animation),
child: child,
);
},
);
//...
//顺时针环绕左下角旋转
RouterManager.router.navigateTo(
context,
RouterManager.transitio弧度的计算公式nPath,
transition: TransitionType.custom,
transitionBu动画片少儿小猪佩奇ilder:flutter是什么意思
(context, animation, secondaryAnimation, child) {
return Ro源码交易网站源码tationTransition(
alig源码是什么意思nment: Alignment.botto动画片少儿小猪佩奇mLeft,动画大放映
turns: Tween<douFlutterble>(
begin: -0.25,
end: 0.0,
).animate(animation),
child: child,
);弧度的计算公式
},
);

其间 Tween 是体系自带的线性插值办法flutter菜鸟教程

缩放转场动画

缩放转场这类在图片预览会比较常见,一般是从较小的份额缩放到1:1份额。运用办法和旋转转场相似,示例代码如下:

RouterManager.router.navigateTo(
context,
RouterManager.transitionPath,
transition: TransitionType.c弧度制公式ustom,
transitionB弧度和视点的换算uilder:
(context,Flutter animation, secondaryAnimation, child) {
return ScaleTrans弧度制与视点制的转化ition(
scale: Tween<double&g源码编辑器编程猫下载t;(
begin: 0.5,
end: 1.0,
).anim动画ate(animation),
child: child,
);
},
);

自界说转场动画

经过阅览源码,其实能够发现RotationTransitionScaleTransition 都是继承自 AnimatedWidget,因而咱们能够自己写一个自界说的 Transition 继承自 AnimatedWidget,在 build办法中回来一个 Transform 方针即可。经过这种办法能够做自界说的转场动画作用。咱们以变形为例,能够运用 Matrix4skew 办法,在 x 和 y 轴动画大放映进行变形,就能够得到转场相似卡片变形动画制造软件的作用。也能够只在 X 轴或 Y 轴变形(sk源码网站ewXFlutterskewflutter怎样读音发音Y 办法)。这儿以 x,y弧度的计算公式 轴一起变形界说了一个转场动画:

class SkewTransition extends AnimatedWidget {
co源码年代nst S源码编辑器编程猫kewTransition({
Key key,
Animation<double> turns,
this.alignment = Alignment.center,
this.child,
})  : assert(turns != null),
sup弧度er(key: key, listenable: turns);
Animation<double> get turns => listenable as Animation<dofluttershyuble>;
final Alignment alignment;
final Widget child;
@override
Widget build(BuildContext context) {
final double turnsValue = turns.value;
final Matflutter中文网rix4 transform =
Mat源码资本rix4.skew(turnsValue * pi * 2.0, turnsValue * pi * 2.0);
return Transform(
transform: transfo源码编辑器编程猫rm,
alignment: alignment,
child: child,
);
}
}

运用办法和 RotationTransition 相似:

RouterManager.router.navigateTo(
context,
RouterManager.transitionPath,
transit动画片少儿ion: TransitionType.custom,
transitionBuilder:
(context, animation,源码编辑器编程猫 secondaryAnimation, c弧度数hild) {
return SkewTransition(
turns: Tween<double>(
begin: -0.05,
end: 0.0,
).animate(animation),
child: child,
);
},
);

实践也能够检验运用环绕 X 轴旋转,环绕 Y 轴旋转,以及改动中心点方弧度制公式位(alignment)来结束不同的动画转场作用。假设需求更为杂乱的动画作用,则能够研究动画的结束,后续篇章将有对应动画的介绍。

作业作用

作业作用如下图所示:

Flutter 入门与实战(十八):使用自界说转场动画完成个性化页面切换

总结

本篇介绍了 fluro 导航到其他页面的自界说转场动画结束,Flutter自身供应了不少预界说的转场动画,能够经过 transitionBuilder 参数规划多种多样的转场动画,也能够经过自界说的 AnimatedWidget结束个性化的转场动画作用。动画制造软件