美文网首页Flutter 入门与实战Flutter圈子
Flutter 实现淡入淡出(Fade)动画效果

Flutter 实现淡入淡出(Fade)动画效果

作者: 岛上码农 | 来源:发表于2022-04-17 11:14 被阅读0次

前言

我们介绍了几篇 Flutter 的动画控制类,相信大家对动画也有了一定的了解,可以通过这些基础的动画控制类实现自己想要的动画效果。在 Flutter 中也提供了一些封装好的动画组件,以便我们快速应用。 本篇我们来介绍渐现效果 —— AnimatedOpacity

AnimatedOpacity 简介

顾名思义,AnimatedOpacity 就是用于动态展示组件的透明度。实际上,它实现的是将其子组件的透明度动态地从初始值过渡到指定值的动画效果。AnimatedOpacity的构造方法如下:

const AnimatedOpacity({
  Key? key,
  this.child,
  required this.opacity,
  Curve curve = Curves.linear,
  required Duration duration,
  VoidCallback? onEnd,
  this.alwaysIncludeSemantics = false,
}) 

对应的参数为:

  • child:要控制透明度的子组件;
  • opacity:最终的透明度值,需要是介于0-1之间的值;
  • curve:动效曲线,默认是线性的Curves.linear,可以使用 Curves 来构建曲线效果;
  • duration:动效时长;
  • alwaysIncludeSemantics:是否总是包含语义信息,默认是 false。这个主要是用于辅助访问的,如果是 true,则不管透明度是多少,都会显示语义信息(可以辅助朗读),这对于视障人员来说会更友好。
  • onEnd:动画结束回调方法。

AnimatedOpacity 应用

应用来说就很简单了,只需要把需要渐现的组件作为 AnimatedOpacity 的子组件,然后在发生事件到时候更改透明度即可。我们实现下面的图片渐现效果。

fadeIn.gif

实现代码如下:

class AnimatedOpacityDemo extends StatefulWidget {
  const AnimatedOpacityDemo({Key? key}) : super(key: key);

  @override
  _AnimatedOpacityDemoState createState() => _AnimatedOpacityDemoState();
}

class _AnimatedOpacityDemoState extends State<AnimatedOpacityDemo> {
  var opacity = 0.0;
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('AnimatedOpacity 动画'),
      ),
      body: Center(
        child: Stack(
          alignment: Alignment.center,
          children: [
            Text('小姐姐在哪'),
            AnimatedOpacity(
              duration: Duration(seconds: 3),
              opacity: opacity,
              child: ClipOval(
                child: Image.asset(
                  'images/beauty.jpeg',
                  width: 300,
                  height: 300,
                ),
              ),
              curve: Curves.ease,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        child: Text(
          opacity == 0 ? 'Show' : 'Hide',
          style: TextStyle(
            color: Colors.white,
          ),
          textAlign: TextAlign.center,
        ),
        onPressed: () {
          setState(() {
            opacity = opacity == 0 ? 1.0 : 0.0;
          });
        },
      ),
    );
  }
}

图片渐现过渡

在相册类应用中,我们经常会看到一张图片逐渐渐变为另一张图片,从而提供更好的图片浏览体验,甚至造成一种时光如梭的感觉。这种效果可以使用 AnimatedOpactity 实现。将一张图片的透明度逐渐降低到0,另一张的透明度逐渐升高到1,从而可以实现图片渐变过渡的效果,例如下面的效果,是不是感觉小姐姐由清纯风变成高冷风的过渡更自然?

fadeInOut.gif

实现的方式其实就是使用 Stack将两张图片堆叠在一起,然后让两张图片的透明度往相反的方向变化就可以实现这样的效果了,代码如下:

class _SwtichImageDemoState extends State<SwtichImageDemo> {
  var opacity1 = 1.0;
  var opacity2 = 0.0;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('图片切换'),
        brightness: Brightness.dark,
        backgroundColor: Colors.black,
      ),
      backgroundColor: Colors.black,
      body: Center(
        child: Stack(
          alignment: Alignment.center,
          children: [
            AnimatedOpacity(
              duration: Duration(milliseconds: 5000),
              opacity: opacity1,
              child: ClipOval(
                child: Image.asset(
                  'images/beauty.jpeg',
                  width: 300,
                  height: 300,
                ),
              ),
              curve: Curves.ease,
            ),
            AnimatedOpacity(
              duration: Duration(milliseconds: 5000),
              opacity: opacity2,
              child: ClipOval(
                child: Image.asset(
                  'images/beauty2.jpeg',
                  width: 300,
                  height: 300,
                ),
              ),
              curve: Curves.ease,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        child: Text(
          '变',
          style: TextStyle(
            color: Colors.white,
          ),
          textAlign: TextAlign.center,
        ),
        onPressed: () {
          setState(() {
            opacity1 = 0.0;
            opacity2 = 1.0;
          });
        },
      ),
    );
  }
}

总结

本篇介绍了 Flutter 自带的渐现动画组件 AnimatedOpacity 的使用,借助 AnimatedOpacity 可以简化渐现动画的实现,比如一个组件的消失动画,两张图片的渐现切换过渡等效果。

相关文章

  • Flutter 实现淡入淡出(Fade)动画效果

    前言 我们介绍了几篇 Flutter 的动画控制类,相信大家对动画也有了一定的了解,可以通过这些基础的动画控制类实...

  • IOS 控制器跳转动画

    animation.type = 动画/*Fade = 1, //淡入淡出Pu...

  • jQuery淡入淡出

    通过 jQuery,您可以实现元素的淡入淡出效果。 jQuery 拥有下面四种 fade 方法:fadeIn()f...

  • jQuery |淡入淡出

    通过 jQuery,您可以实现元素的淡入淡出效果。 jQuery 拥有下面四种 fade 方法:fadeIn()f...

  • Element初探

    一:内置过渡动画 1.fade淡入淡出 2.zoom三种缩放效果 3.collapse展开折叠 二:组件 1.la...

  • jquery 效果

    隐藏、显示、切换,滑动,淡入淡出,以及动画,hide() 隐藏show() 显示toggle()隐藏和显示fade...

  • jQuery中淡出淡入 效果

    jQuery 效果 -淡入淡出 jQuery Fading 方法 jQuery 拥有下面四种 fade 方法: f...

  • toast出现后自动消失

    //淡入淡出动画效果

  • flutter常用控件用法收藏

    flutter圆角效果实现 outlineButton 头部折叠动画效果 flutter按钮shape设置 Flu...

  • 小程序淡入淡出动画

    实现一个开关式的淡入淡出动画效果 今天接到了个小需求,没事的时候研究了下,点亮/关闭星星淡入淡出效果,结合anim...

网友评论

    本文标题:Flutter 实现淡入淡出(Fade)动画效果

    本文链接:https://www.haomeiwen.com/subject/xmtlertx.html