• flutter-路由跳转动画效果(渐隐渐现,缩放效果,旋转缩放)


    1.渐隐渐现过渡效果

    自定义CustomRoute Widget

    新建一个custom_router.dart文件,这个就是要自定义的路由方法,自定义首先要继承于通用的路由的构造器类PageRouterBuilder。继承之后重写父类的CustomRoute构造方法。

    构造方法可以简单理解为:只要以调用这个类或者说是Widget,构造方法里的所有代码就执行了。

    import 'package:flutter/material.dart';
    
    
    //自定义的路由方法
    class CustomRoute extends PageRouteBuilder{
    
      final Widget widget;
    
      //重写构造方法(一调用该方法就执行的方法 就叫构造方法)
      CustomRoute(this.widget)
        :super( //父类的方法
          //设置动画持续的时间,建议再1和2之间
          transitionDuration:const Duration(seconds: 1),
          //页面的构造器
          pageBuilder:(
            BuildContext context,
            Animation<double> animation1,
            Animation<double> animation2,
          ){
            return widget;
          },
          //过度效果
          transitionsBuilder:(
            BuildContext  context,
            Animation<double> animation1,
            Animation<double> animation2,
            Widget child
          ){
            // 过度的动画的值
            return FadeTransition(
              // 过度的透明的效果 
              opacity: Tween(begin: 0.0,end: 1.0)
                // 给他个透明度的动画   CurvedAnimation:设置动画曲线
                .animate(CurvedAnimation(
                  //父级动画
                  parent: animation1,
                  //动画曲线
                  curve: Curves.ease
                )),
              child: child,
            );
      });
    }


    //使用
    import 'custom_router.dart';
    Navigator.push(context, CustomRoute(SecondPage()));
     
    • FadeTransition:渐隐渐现过渡效果,主要设置opactiy(透明度)属性,值是0.0-1.0。
    • animate :动画的样式,一般使用动画曲线组件(CurvedAnimation)。

    • curve: 设置动画的节奏,也就是常说的曲线,Flutter准备了很多节奏,通过改变动画取消可以做出很多不同的效果。

    • transitionDuration:设置动画持续的时间,建议再1和2之间。

    2.缩放效果

    //缩放的动画效果
            return ScaleTransition(
              scale: Tween(begin: 0.0,end: 1.0)
                .animate(CurvedAnimation(
                  parent: animation1,
                  //快出慢进
                  curve: Curves.fastOutSlowIn
                )),
                child: child,
            );

    3.旋转+缩放效果

    //旋转+缩放效果
            return RotationTransition(
              turns: Tween(begin: 0.0,end: 1.0)
                .animate(CurvedAnimation(
                  parent: animation1,
                  curve: Curves.fastOutSlowIn
                )),
                child: ScaleTransition(
                  scale: Tween(begin: 0.0,end: 1.0)
                    .animate(CurvedAnimation(
                      parent: animation1,
                      curve: Curves.fastOutSlowIn
                    )),
                  child: child,
                ),
            );

    4.左右切换滑动

    //左右滑动切换
            return SlideTransition(
              //定义滑动的位置
              position: Tween<Offset>(begin: Offset(-1.0,0.0),end: Offset(0.0,0.0))
                .animate(CurvedAnimation(
                  parent: animation1,
                  curve: Curves.fastOutSlowIn
                )),
                child: child,
            );

    可以直接这么写

    Navigator.push(
                  context,
                  PageRouteBuilder(
                    transitionDuration: Duration(milliseconds: 500), //动画时间为500毫秒
                    pageBuilder: (BuildContext context, Animation animation,
                        Animation secondaryAnimation) {
                          return ScaleTransition(
                            scale: Tween(begin: 0.0,end: 1.0)
                              .animate(CurvedAnimation(
                                parent:animation,
                                curve:Curves.fastOutSlowIn
                              )),
                            child: SecondPage(),
                          );
                    },
                  ),
                );
  • 相关阅读:
    C#面向对象 类的继承
    C#面向对象 类的封装
    C#面向对象 类
    C#面向对象 1
    盒子模型、网页自动居中、float浮动与清除、横向两列布局
    HTML格式与布局
    HTML表单 CSS样式
    HTML—标签与表格 、框架
    触发器,视图
    while 循环,存储过程
  • 原文地址:https://www.cnblogs.com/lxz-blogs/p/13234230.html
Copyright © 2020-2023  润新知