[译] 关于 Flutter 页面路由过渡动画,你所需要知道的一切(2)

}

我们现在就可以像这样使用 SlideRightRoute ,代替了之前的 MaterialPageRoute

Navigator.push(context, SlideRightRoute(page: Screen2()))

代码运行的效果是…

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

代码非常简单的对吧?你可以通过修改偏移量 offset 来改变滑动过渡的方向。

缩放过渡

缩放过渡会通过改变组件的大小来完成动画效果。你也可以通过修改 CurvedAnimationcurves 来改变动画。下面这个例子我使用的是 Curves.fastOutSlowIn。

import ‘package:flutter/material.dart’;

class ScaleRoute extends PageRouteBuilder {
final Widget page;
ScaleRoute({this.page})
: super(
pageBuilder: (
BuildContext context,
Animation animation,
Animation secondaryAnimation,
) =>
page,
transitionsBuilder: (
BuildContext context,
Animation animation,
Animation secondaryAnimation,
Widget child,
) =>
ScaleTransition(
scale: Tween(
begin: 0.0,
end: 1.0,
).animate(
CurvedAnimation(
parent: animation,
curve: Curves.fastOutSlowIn,
),
),
child: child,
),
);
}

代码运行的效果是…

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

旋转过渡

旋转过渡会以转动作为组件的动画。你也可以为你的 PageRouteBuilder 加入 transitionDuration

import ‘package:flutter/material.dart’;

class RotationRoute extends PageRouteBuilder {
final Widget page;
RotationRoute({this.page})
: super(
pageBuilder: (
BuildContext context,
Animation animation,
Animation secondaryAnimation,
) =>
page,
transitionDuration: Duration(seconds: 1),
transitionsBuilder: (
BuildContext context,
Animation animation,
Animation secondaryAnimation,
Widget child,
) =>
RotationTransition(
turns: Tween(
begin: 0.0,
end: 1.0,
).animate(
CurvedAnimation(
parent: animation,
curve: Curves.linear,
),
),
child: child,
),
);
}

代码运行的效果是…

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

大小过渡

import ‘package:flutter/material.dart’;

class SizeRoute extends PageRouteBuilder {
final Widget page;
SizeRoute({this.page})
: super(
pageBuilder: (
BuildContext context,
Animation animation,
Animation secondaryAnimation,
) =>
page,
transitionsBuilder: (
BuildContext context,
Animation animation,
Animation secondaryAnimation,
Widget child,
) =>
Align(
child: SizeTransition(
sizeFactor: animation,
child: child,
),
),
);
}

代码运行的效果是…

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

渐变过渡

import ‘package:flutter/material.dart’;

class FadeRoute extends PageRouteBuilder {
final Widget page;
FadeRoute({this.page})
: super(
pageBuilder: (
BuildContext context,
Animation animation,
Animation secondaryAnimation,
) =>
page,
transitionsBuilder: (
BuildContext context,
Animation animation,
Animation secondaryAnimation,
Widget child,
) =>
FadeTransition(
opacity: animation,
child: child,
),
);
}

代码运行的效果是…

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

棒棒哒!! 现在我们学习过了所有基础的过渡效果。


现在我们来实践一些更高级的。如果在进入页面和离开页面这两个路由跳转的时候都想要动画该怎么做呢?我们可以使用堆栈过渡动画(stack transition animations),并应用于这两个路由跳转上。一个例子就是滑入新页面,然后划出旧页面。这是我最喜欢的过渡动画了 ❤️。我们来看看代码是如何实现的。

import ‘package:flutter/material.dart’;

class EnterExitRoute extends PageRouteBuilder {
final Widget enterPage;
final Widget exitPage;
EnterExitRoute({this.exitPage, this.enterPage})
: super(
pageBuilder: (
BuildContext context,
Animation animation,
Animation secondaryAnimation,
) =>
enterPage,
transitionsBuilder: (
BuildContext context,
Animation animation,
Animation secondaryAnimation,
Widget child,
) =>
Stack(
children: [
SlideTransition(
position: new Tween(
begin: const Offset(0.0, 0.0),
end: const Offset(-1.0, 0.0),
).animate(animation),
child: exitPage,
),
SlideTransition(
position: new Tween(
begin: const Offset(1.0, 0.0),
end: Offset.zero,
).animate(animation),
child: enterPage,
)
],
),
);
}

然后如下这样来使用 EnterExitRoute:

Navigator.push(context,
EnterExitRoute(exitPage: this, enterPage: Screen2()))

代码运行的效果是…

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传


我们也可以将多个过渡效果结合在一起,创建出很多神奇的效果,比如同时应用缩放和旋转。首先,创建 ScaleTransition,它的 child 属性包括了 RotationTransition,而 RotationTransition 的 child 属性则是要显示动画的页面。

import ‘package:flutter/material.dart’;

class ScaleRotateRoute extends PageRouteBuilder {
final Widget page;
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

最后附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题 (含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总)

面试成功其实是必然的,因为我做足了充分的准备工作,包括刷题啊,看一些Android核心的知识点,看一些面试的博客吸取大家面试的一些经验,下面这份PDF是我翻阅了差不多1个月左右一些Android大博主的博客从他们那里取其精华去其糟泊所整理出来的一些Android的核心知识点, 全部都是精华中的精华,我能面试到现在资深开发人员跟我整理的这本Android核心知识点有密不可分的关系,在这里本着共赢的心态分享给各位朋友。

这份PDF囊括了JVM,Java集合,Java多线程并发,Java基础,生命周期,微服务, 进程,Parcelable 接口,IPC,屏幕适配,线程异步,ART,架构,Jetpack,NDK开发,计算机网络基础,类加载器,Android 开源库源码分析,设计模式汇总,Gradle 知识点汇总…

由于篇幅有限,就不做过多的介绍,大家请自行脑补

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

多线程并发,Java基础,生命周期,微服务, 进程,Parcelable 接口,IPC,屏幕适配,线程异步,ART,架构,Jetpack,NDK开发,计算机网络基础,类加载器,Android 开源库源码分析,设计模式汇总,Gradle 知识点汇总…

由于篇幅有限,就不做过多的介绍,大家请自行脑补

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 16
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
想要在 Flutter 中为不同的路由页面)设置不同的转场动画,可以通过自定义路由来实现。下面是一个简单的示例,演示如何创建一个自定义路由并为其设置不同的转场动画: 1. 创建一个自定义路由类 MyCustomRoute,继承自 MaterialPageRoute。 ```dart class MyCustomRoute extends MaterialPageRoute { MyCustomRoute({WidgetBuilder builder, RouteSettings settings}) : super(builder: builder, settings: settings); @override Widget buildTransitions(BuildContext context, Animation<double> animation, Animation<double> secondaryAnimation, Widget child) { // 这里可以为不同的路由设置不同的转场动画 if (settings.name == '/page1') { return FadeTransition(opacity: animation, child: child); } else if (settings.name == '/page2') { return ScaleTransition(scale: animation, child: child); } else { // 默认的转场动画 return super.buildTransitions(context, animation, secondaryAnimation, child); } } } ``` 2. 在 MaterialApp 中使用自定义路由 ```dart class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: 'MyApp', initialRoute: '/', onGenerateRoute: (RouteSettings settings) { switch (settings.name) { case '/page1': return MyCustomRoute(builder: (_) => Page1(), settings: settings); case '/page2': return MyCustomRoute(builder: (_) => Page2(), settings: settings); default: return MyCustomRoute(builder: (_) => HomePage(), settings: settings); } }, ); } } ``` 在上面的示例中,我们为两个页面(/page1 和 /page2)设置了不同的转场动画,而对于其他页面则使用了默认的转场动画需要注意的是,这里的转场动画只是示例,你可以根据自己的需要来自定义转场动画。同时,建议在自定义路由类中重写 buildPage 方法,以便于在每次进入新页面时执行一些初始化操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值