首页 > 其他分享 >极简实现酷炫动效:Flutter隐式动画指南第二篇之一些酷炫的隐式动画效果

极简实现酷炫动效:Flutter隐式动画指南第二篇之一些酷炫的隐式动画效果

时间:2024-11-01 21:19:30浏览次数:3  
标签:动画 Widget const 极简 缩放 Colors child 隐式

目录

前言

1.弹性放大按钮效果

2.旋转和缩放组合动画

3.颜色渐变背景动画

4.缩放进出效果


前言

        在上一篇文章中,我们介绍了Flutter中的隐式动画的一些相关知识,在这篇文章中,我们可以结合多个隐式动画 Widget 在 Flutter 中创建一些酷炫的视觉效果,比如弹性按钮、旋转动画、颜色过渡等。以下示例展示如何组合不同的隐式动画,以实现更复杂的视觉效果。

1.弹性放大按钮效果

        我们可以通过结合隐式动画的Widget组件并且通过设置动画的属性,实现一个弹簧效果。

        效果如下:

        图1.使用AnimatedContainer实现弹簧动画效果

        核心代码如下:

import 'package:flutter/material.dart';

class ElasticButtonExample extends StatefulWidget {
  const ElasticButtonExample({super.key});

  @override
  State<ElasticButtonExample> createState() => _ElasticButtonExampleState();
}

class _ElasticButtonExampleState extends State<ElasticButtonExample> {
  bool _isTapped = false;

  void _toggleSize() {
    setState(() {
      _isTapped = !_isTapped;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Colors.purple,
        title: const Text('弹簧动画效果',style: TextStyle(color: Colors.white,fontWeight: FontWeight.bold,fontSize: 16),),
      ),
      body: Center(
        child: GestureDetector(
          onTap: _toggleSize,
          child: AnimatedContainer(
            duration: const Duration(milliseconds: 200),
            curve: Curves.easeOutBack,
            width: _isTapped ? 120 : 100,
            height: _isTapped ? 120 : 100,
            decoration: BoxDecoration(
              color: Colors.blue,
              borderRadius: BorderRadius.circular(20),
            ),
            child: const Center(
              child: Text(
                'Press Me',
                style: TextStyle(color: Colors.white),
              ),
            ),
          ),
        ),
      ),
    );
  }
}

2.旋转和缩放组合动画

        点击按钮时实现颜色渐变、旋转和缩放组合动画,让 Widget 更加立体和动感。

        在下面的例子中,我们通过结合AnimatedContainer的颜色渐变、旋转和缩放等动画属性实现一个组合的酷炫动画效果。

图2.旋转缩放组合动画效果

3.颜色渐变背景动画

        实现点击屏幕时背景颜色渐变,带来柔和的视觉效果,适合用于内容页面切换时。    

<iframe allowfullscreen="true" data-mediaembed="bilibili" frameborder="0" id="X0OIJxTA-1730464389212" src="https://player.bilibili.com/player.html?aid=113407705482517"></iframe>

Flutter实现背景渐变动画效果

        核心的代码如下:

class GradientBackgroundExample extends StatefulWidget {
  @override
  _GradientBackgroundExampleState createState() =>
      _GradientBackgroundExampleState();
}

class _GradientBackgroundExampleState extends State<GradientBackgroundExample> {
  bool _isColorChanged = false;

  void _changeBackground() {
    setState(() {
      _isColorChanged = !_isColorChanged;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: GestureDetector(
        onTap: _changeBackground,
        child: AnimatedContainer(
          duration: const Duration(seconds: 1),
          decoration: BoxDecoration(
            gradient: LinearGradient(
              colors: _isColorChanged
                  ? [Colors.purple, Colors.blue]
                  : [Colors.orange, Colors.red],
              begin: Alignment.topLeft,
              end: Alignment.bottomRight,
            ),
          ),
          child: const Center(
            child: Text(
              'Tap to Change Background',
              style: TextStyle(fontSize: 24, color: Colors.white),
            ),
          ),
        ),
      ),
    );
  }
}

4.缩放进出效果

        创建一个 Widget 进入和退出时具有缩放动画效果,用于过渡显示内容。

        例如我们要实现下面的效果图,主要的核心代码如下:                

图4.缩放进出动画效果

        主要的核心代码如下:

class ScaleInOutExample extends StatefulWidget {
  @override
  _ScaleInOutExampleState createState() => _ScaleInOutExampleState();
}

class _ScaleInOutExampleState extends State<ScaleInOutExample> {
  bool _isVisible = true;

  void _toggleVisibility() {
    setState(() {
      _isVisible = !_isVisible;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('Scale In/Out Example')),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            AnimatedOpacity(
              duration: const Duration(milliseconds: 500),
              opacity: _isVisible ? 1.0 : 0.0,
              child: AnimatedScale(
                duration: const Duration(milliseconds: 500),
                scale: _isVisible ? 1.0 : 0.5,
                child: Container(
                  width: 100,
                  height: 100,
                  color: Colors.blue,
                  child: const Center(
                    child: Text(
                      'Hello!',
                      style: TextStyle(color: Colors.white, fontSize: 20),
                    ),
                  ),
                ),
              ),
            ),
            const SizedBox(height: 20),
            ElevatedButton(
              onPressed: _toggleVisibility,
              child: const Text('Toggle Visibility'),
            ),
          ],
        ),
      ),
    );
  }
}

标签:动画,Widget,const,极简,缩放,Colors,child,隐式
From: https://blog.csdn.net/ZCC361571217/article/details/143420682

相关文章

  • 10 大元素打造的极简主义画卷,究竟藏着什么秘密?(建议收藏)
    01提示词:极简主义,中国水墨画,水墨画,1女孩,贝雷帽,棕色眼睛,闭着嘴,牛仔夹克,马尾辫,敞开的外套,黑色裤子,兜帽,银杏树,黑色头饰,连帽衫,兜帽下,棒球帽,白色衬衫,树枝,黄色裤子,蝴蝶,简单的背景,白色背景,高质量,极其细节,正式艺术,杰作,3D渲染,统一4K壁纸,超级细节,4K。女孩眼睛自然迷人,4k,超高......
  • Autodesk Maya 2025.3 Multilanguage (macOS, Windows) - 三维动画和视觉特效软件
    AutodeskMaya2025.3Multilanguage(macOS,Windows)-三维动画和视觉特效软件三维计算机动画、建模、仿真和渲染软件请访问原文链接:https://sysin.org/blog/autodesk-maya/查看最新版。原创作品,转载请保留出处。作者主页:sysin.org三维计算机动画、建模、仿真和渲染软件......
  • PMP--一、二、三模--分类--10.沟通管理--技巧--1、考纲分析极简版:1.凡信息,找沟通。2.
    文章目录一模10.沟通管理--沟通管理计划--凡信息,找沟通。----题干关键词“信息、报告、项目状态、误解、通知、开会、上报步骤、术语表”。--题干出现`误解`,选沟通管理计划。55、[单选]一个项目团队正在不同时区工作,团队成员之间经常出现`误解`,尽管项目经理试图解决这......
  • VSCode编辑器极简使用入门
    VSCode(VisualStudioCode)是一款开源、跨平台、轻量级的代码编辑器,具有非常丰富的插件生态。他本身就是JavaScript + Electron (/ɪˈlektrɒn/电子)代码开发的。官方下载地址:https://code.visualstudio.com/,支持绿色无安装。01、常用快捷键工具快捷键描述Ctrl+Shi......
  • HTML&CSS:3D旋转动画机器人摄像头
    效果演示创建了一个3D机器人摄像头效果。HTML<divclass="modelViewPort"><divclass="eva"><divclass="head"><divclass="eyeChamber"><divclass="eye">......
  • Adobe Animate 2025 v25.0 (macOS, Windows) - 动画制作
    AdobeAnimate2025v25.0(macOS,Windows)-动画制作Acrobat、AfterEffects、Animate、Audition、Bridge、CharacterAnimator、Dimension、Dreamweaver、Illustrator、InCopy、InDesign、LightroomClassic、MediaEncoder、Photoshop、PremierePro、AdobeXD请访问原文链......
  • Adobe Character Animator 2025 v25.0 (macOS, Windows) - 动作捕获动画软件
    AdobeCharacterAnimator2025v25.0(macOS,Windows)-动作捕获动画软件Acrobat、AfterEffects、Animate、Audition、Bridge、CharacterAnimator、Dimension、Dreamweaver、Illustrator、InCopy、InDesign、LightroomClassic、MediaEncoder、Photoshop、PremierePro、Ad......
  • Go语言内置集合的隐式指针
    在Go语言中,有几种内置集合类型(如slice、map和channel),这些类型的特殊之处在于它们实际上是隐式指针。这意味着当我们将这些集合类型传递给函数或方法时,传递的是它们的引用,而不是拷贝。这种特性使得这些集合能够在函数中直接修改原始数据,而不需要显式传递指针。1.内置集合......
  • 云渲染突破酒店3D动画渲染速度与成本瓶颈!
    3D动画已经成为众多行业,尤其是酒店业,用于营销和展示其独特卖点的重要工具。通过生动的3D动画,酒店能够突出其特色和优势,从而吸引更多潜在客户。然而,在3D动画制作过程中,渲染环节往往是一个耗时且技术要求高的任务。幸运的是,云渲染技术的出现为解决这一难题提供了有效的解决方案,它能......
  • 前端开发者必学:mo.js动画库
    前端开发者必学:mo.js动画库前言在当今的网页设计中,动态效果和交互性是提升用户体验的关键因素。mo.js,一个轻量级的JavaScript动画库,为前端开发者提供了一种简单而强大的方法来创建引人注目的动画效果。本文将向您介绍mo.js的基本概念、特点、使用场景以及如何在Vue环境......