当前位置:首页 > 移动端开发 > 正文内容

App杂乱动画完成——Rive保姆级教程

邻居的猫1个月前 (12-09)移动端开发1880

作者:京东物流 沈亮堂

在App开发进程中,假如想完成动画作用,能够大略分为两种办法。一种是直接用代码编写,像平移、旋转等简略的动画作用,都能够这么干,假如略微杂乱点,就会对开发工程师的数学功底、图形图像学功底有很高的要求。

另一种办法,能够让UI同学合作,一次性出多张图片或许直接出一张GIF图,经过短时刻内快速轮播图片的办法来完成杂乱动画作用,这种办法真实完成起来仍是有挺多问题的,比方短少对动画进程的操控、图片尺寸的适配等等。那么,有没有更好的解决方案呢?

有的,Rive。

简介

Rive是专门为简化动画的完成而生的,规划师能够在其官网经过迁延拽完成各种杂乱动画作用,规划结束后导出动画文件,工程师能够在App里直接导入此文件,合作相应的SDK即可完成。

其官网有具体的开发文档,一起也有自己的社区资源,咱们能够直接从社区里下载他人规划好的动画作用进行学习。别的特别重要的是,Rive支撑跨渠道,一起支撑Android、iOS、Flutter、JS、React、C++等等,本文以Flutter的完成为例介绍。

一个完好的比如

  1. 登陆Rive官网进行规划,并导出相应的动画文件,Rive的动画文件是以.riv结束。

本文示例是从官网的社区里找的一个个人比较喜爱的动效。

  1. 顺次运转下面的指令,引进rive sdk。

  1. 将导出的.riv文件放到资源目录下,并修正pubspec.yaml文件。

  1. 加载动画文件并展现的中心代码:

中心代码就这么多,关于代码中的标示具体阐明下:

  • 标示1的当地,首要作用是获取状态机操控器,fromArtboard 办法有两个参数,第二个参数是状态机的称号,这个称号需要和UI同学洽谈好,一旦确认好称号就不答应规划同学再改了,对应于规划面板界面的左下角,如下图:

  • 标示2的当地,本例的动画是依据“数值”的改变而改变的,findInput的入参相同需要和UI同学洽谈好,一旦规划时把这个姓名改了,代码里也别忘了进行相应的修正,也在规划面板的左下角,在状态机称号的右边,如下图:

完好的代码如下,我们能够按过程自己操作体会下。

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

  @override
  State<RiveDemo> createState() => _RiveDemoState();
}

class _RiveDemoState extends State<RiveDemo> {
  /// 状态机操控器
  StateMachineController? controller;
  /// 操控输入数值
  SMIInput<double>? valueController;
  ///画板,合作Rive widget 运用,展现动画作用。
  Artboard? riveArtboard;
  Timer? timer;

  @override
  void initState() {
    super.initState();
    //加载
    rootBundle.load('asset/rives/rive_demo.riv').then((value) async {
      final file = RiveFile.import(value);
      final artboard = file.mainArtboard;
      //1
      controller = StateMachineController.fromArtboard(artboard, 'TreeMachine');
      if (controller != null) {
        setState(() {
          artboard.addController(controller!);
          //2
          valueController = controller!.findInput('input');
          valueController!.value = -4;
        });
      }

      riveArtboard = artboard;
    });
  }

  @override
  void dispose() {
    controller?.dispose();
    stopAnimation();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Rive Demo'),
      ),
      backgroundColor: Colors.white,
      body: Center(
        child: riveArtboard == null ? const CircularProgressIndicator() : Rive(artboard: riveArtboard!),
      ),
      floatingActionButton: SizedBox(
        height: 50,
        child: Row(
          mainAxisAlignment: MainAxisAlignment.end,
          children: [
            TextButton(
              onPressed: () {
                startAnimation();
              },
              child: const Text('start'),
            ),
            TextButton(
              onPressed: () {
                stopAnimation();
              },
              child: const Text('stop'),
            ),
            TextButton(
              onPressed: () {
                resetAnimation();
              },
              child: const Text('reset'),
            ),
          ],
        ),
      ),
    );
  }

  /// 开端动画
  void startAnimation() {
    if (timer != null) {
      return;
    }
    timer = Timer.periodic(const Duration(milliseconds: 60), (timer) {
      valueController?.value += 0.5;
    });
  }

  /// 中止动画
  void stopAnimation() {
    timer?.cancel();
    timer = null;
  }

  /// 重置动画
  void resetAnimation() {
    stopAnimation();
    valueController?.value = 0;
  }
}

总结

像本例中的动画作用,假如用代码来编写,时刻本钱会很大很大,假如靠图片的堆积,完成起来也很费事,并且因为图片的数量增多,安装包的体积也会添加许多。可是用rive,完成起来却很便利,或许仅有的本钱便是规划师同学的学习本钱。

Rive不只支撑本地动画文件的加载,还能够将动画文件放到服务器上,运用RiveAnimation.network办法进行加载。更多的运用示例能够参阅:
https://github.com/rive-app/rive-flutter/tree/master/example

扫描二维码推送至手机访问。

版权声明:本文由51Blog发布,如需转载请注明出处。

本文链接:https://www.51blog.vip/?id=509

分享给朋友:

“App杂乱动画完成——Rive保姆级教程” 的相关文章

FragmentContainerView、ViewPager、ViewPager2与 BottomNaviagtionView结合运用的差异

FragmentContainerView、ViewPager、ViewPager2与 BottomNaviagtionView结合运用的差异

现在市道的运用界面大多是经过一个Fragment容器+底部导航栏结构来完成页面切换的,而当咱们想要去建立一个这样的结构时,上层的Fragment容器是可选的,常见的有FragmentContanerView、ViewPager、ViewPager2。咱们应该怎么挑选呢?这时就需要考虑这三者的本身自...

鸿蒙系统申请,轻松开启全场景智能体验

鸿蒙系统申请,轻松开启全场景智能体验

申请鸿蒙系统可以通过以下几种方式: 一、HarmonyOS NEXT 开发者预览版 Beta 招募1. 报名条件: 完成应知测试并填写申请信息。 持有招募机型的设备并已升级至基线版本。 如果是开发者,需在华为开发者联盟完成实名认证。 签署保密协议并通过报名答题。2. 报名流程...

oppo手机怎么关闭开发者模式,OPPO手机如何关闭开发者模式?轻松操作,保障手机安全

oppo手机怎么关闭开发者模式,OPPO手机如何关闭开发者模式?轻松操作,保障手机安全

OPPO手机关闭开发者模式的方法如下:1. 打开手机的“设置”应用。2. 向下滑动屏幕,找到并点击“关于手机”或“系统”选项。3. 在“关于手机”或“系统”页面中,连续点击“版本号”或“软件版本”选项7次,直到出现提示“您已进入开发者模式”。4. 返回到“设置”页面,向下滑动屏幕,找到并点击“更多设...

手机网站开发框架,手机网站开发框架的选择与应用

手机网站开发框架,手机网站开发框架的选择与应用

1. Bootstrap:Bootstrap 是一个非常流行的前端框架,它提供了丰富的 CSS 和 JavaScript 组件,可以帮助开发者快速构建响应式网站。它支持移动设备优先的设计,使得网站在不同尺寸的屏幕上都能有良好的表现。2. Foundation:Foundation 是另一个流行的前端...

至尊鸿蒙道,神秘宇宙的修炼奥秘

至尊鸿蒙道,神秘宇宙的修炼奥秘

《鸿蒙至尊道》是天煞血少创作的一部仙侠小说,发表于起点中文网。以下是该小说的详细介绍: 小说简介《鸿蒙至尊道》的故事背景设定在一个天道崩塌、灵气稀薄的世界,修仙长生之路已经变得艰难。小说的主人公李元穿越到洪荒时代,成为女娲造人的三千人族之一。他开局即成为仙人,但却面临着妖族的屠杀,最终成为人族之祖。...

精通ios开发,精通iOS开发的必备之路

精通ios开发,精通iOS开发的必备之路

精通iOS开发需要掌握一系列技能和知识,包括但不限于:1. Swift编程语言:Swift是苹果公司为iOS、macOS、watchOS和tvOS等平台开发的编程语言。掌握Swift是iOS开发的基础。2. ObjectiveC:虽然Swift是现代iOS开发的主要语言,但了解ObjectiveC仍...