Flutter SVG动画播放插件svgaplayer_flutter_rhr的使用

发布于 1周前 作者 sinazl 来自 Flutter

Flutter SVG动画播放插件svgaplayer_flutter_rhr的使用

支持本项目

如果 SVGA-Flutter 为您提供了便利与帮助,诚恳建议您通过以下方式支持作者、贡献者持续为该项目发电。

  1. 轻点 GitHub Star,让更多人看到该项目。
  2. 通过赞赏码(页面底部可见)的方式鼓励作者继续维护代码。

关注作者另外一个开源项目,MPFlutter,使用 Flutter 开发微信小程序。

简介

SVGAPlayer 是一个轻量级的动画渲染器。您可以使用 工具 从 Adobe Animate CC 或 Adobe After Effects 导出 svga 文件,然后使用 SVGAPlayer 在移动应用程序中渲染动画。

SVGAPlayer-Flutter 通过 Flutter CustomPainter 原生渲染动画,为您提供高性能、低成本的动画体验。

更多信息,请访问 网站

  • SVGAPlayer-Flutter 支持 2.0 格式。

使用

这里介绍 SVGAPlayer-Flutter 的使用方法。有关导出使用的详细信息,请点击 这里

添加依赖

dependencies:
  svgaplayer_flutter: ^2.0.0  #最新版本

定位文件

SVGAPlayer 可以从 Flutter 的本地 assets 目录或远程服务器加载 svga 文件。请自行将文件添加到 pubspec.yaml 中。

极其简单的使用方法

渲染动画的最简单方法是使用 SVGASimpleImage 组件。

class MyWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Container(
      child: SVGASimpleImage(
          resUrl: "https://github.com/yyued/SVGA-Samples/blob/master/angel.svga?raw=true"),
    );
  }
}

动画会重复播放。如果您想要更强的动画控制,可以使用代码。

使用代码控制

要控制动画的渲染,您需要创建一个 SVGAAnimationController 实例,就像 Flutter 中的常规动画一样。将其分配给 SVGAImage,使用 SVGAParser 加载并解码资源,然后使用 SVGAAnimationController 进行操作。

import 'package:flutter/material.dart';
import 'package:svgaplayer_flutter/svgaplayer_flutter.dart';

void main() => runApp(MyApp());

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> with SingleTickerProviderStateMixin {
  SVGAAnimationController animationController;

  @override
  void initState() {
    this.animationController = SVGAAnimationController(vsync: this);
    this.loadAnimation();
    super.initState();
  }

  @override
  void dispose() {
    this.animationController.dispose();
    super.dispose();
  }

  void loadAnimation() async {
    final videoItem = await SVGAParser.shared.decodeFromURL(
        "https://github.com/yyued/SVGA-Samples/blob/master/angel.svga?raw=true");
    this.animationController.videoItem = videoItem;
    this
        .animationController
        .repeat() // 尝试使用 .forward() .reverse()
        .whenComplete(() => this.animationController.videoItem = null);
  }

  @override
  Widget build(BuildContext context) {
    return Container(
      child: SVGAImage(this.animationController),
    );
  }
}

重用 MovieEntity

MovieEntityAnimationController 销毁或 AnimationController::videoItem 重置后会被销毁。

销毁后,MovieEntity 无法重用。

如果您希望重用 MovieEntity,请将 MovieEntity::autorelease 设置为 false

final videoItem = await SVGAParser.shared.decodeFromURL(
        "https://github.com/yyued/SVGA-Samples/blob/master/angel.svga?raw=true");
videoItem.autorelease = false;

更多关于Flutter SVG动画播放插件svgaplayer_flutter_rhr的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter SVG动画播放插件svgaplayer_flutter_rhr的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用svgaplayer_flutter_rhr插件来播放SVG动画的示例代码。这个插件允许你加载和播放SVGAPlayer动画文件(.svga格式)。

首先,确保你的Flutter项目已经添加了这个插件。在你的pubspec.yaml文件中添加以下依赖:

dependencies:
  flutter:
    sdk: flutter
  svgaplayer_flutter_rhr: ^最新版本号  # 请替换为实际的最新版本号

然后运行flutter pub get来安装依赖。

接下来,你可以在你的Flutter应用中使用这个插件来播放SVG动画。以下是一个完整的示例代码:

import 'package:flutter/material.dart';
import 'package:svgaplayer_flutter_rhr/svgaplayer_flutter_rhr.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'SVG Animation Player',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: SVGAnimationScreen(),
    );
  }
}

class SVGAnimationScreen extends StatefulWidget {
  @override
  _SVGAnimationScreenState createState() => _SVGAnimationScreenState();
}

class _SVGAnimationScreenState extends State<SVGAnimationScreen> {
  late SVGAPlayerController _controller;

  @override
  void initState() {
    super.initState();
    // 初始化控制器
    _controller = SVGAPlayerController.asset('assets/your_animation.svga');
    // 加载动画文件,路径为assets目录下的your_animation.svga文件
    _controller.loadAsset('assets/your_animation.svga');
    // 播放动画
    _controller.play();
  }

  @override
  void dispose() {
    // 释放资源
    _controller.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('SVG Animation Player'),
      ),
      body: Center(
        child: SVGAPlayer(
          controller: _controller,
          width: 300, // 设置动画的宽度
          height: 300, // 设置动画的高度
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          // 切换播放/暂停状态
          if (_controller.isPlaying) {
            _controller.pause();
          } else {
            _controller.play();
          }
        },
        tooltip: 'Play/Pause',
        child: Icon(
          _controller.isPlaying ? Icons.pause : Icons.play_arrow,
        ),
      ),
    );
  }
}

在这个示例中,我们做了以下几件事:

  1. 依赖安装:在pubspec.yaml文件中添加了svgaplayer_flutter_rhr依赖。

  2. 资源文件:将你的.svga文件放置在assets目录下,并在pubspec.yaml中声明这个资源:

    flutter:
      assets:
        - assets/your_animation.svga
    
  3. 初始化控制器:在initState方法中初始化SVGAPlayerController,并加载和播放动画。

  4. UI布局:使用SVGAPlayer小部件来显示动画,并提供一个浮动按钮来切换播放/暂停状态。

请确保你已经将.svga文件正确放置在assets目录下,并在pubspec.yaml中正确声明。

这个示例代码提供了一个基本的框架,你可以根据需要进一步扩展和自定义,比如添加循环播放、调整动画速度等功能。

回到顶部