Flutter动画展示插件lottie的使用
Flutter动画展示插件lottie的使用
Lottie for Flutter 是一个用于在Flutter应用中展示Adobe After Effects 动画的库。这些动画通过Bodymovin导出为json格式,并在移动设备上原生渲染。以下是关于如何使用Lottie for Flutter的详细介绍和示例代码。
使用方法
简单动画
最简单的方式是直接加载一个本地或远程的json文件并播放动画。Lottie
widget会自动加载JSON文件并无限循环播放动画。
import 'package:flutter/material.dart';
import 'package:lottie/lottie.dart';
void main() => runApp(const MyApp());
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: ListView(
children: [
// 从assets加载Lottie动画文件
Lottie.asset('assets/LottieLogo1.json'),
// 从网络URL加载Lottie动画文件
Lottie.network(
'https://raw.githubusercontent.com/xvrh/lottie-flutter/master/example/assets/Mobilo/A.json'),
// 从zip文件加载动画及其图片
Lottie.asset('assets/lottiefiles/angel.zip'),
],
),
),
);
}
}
自定义 AnimationController
为了对动画有更精确的控制,可以提供自定义的AnimationController
。这允许你以多种方式播放动画:例如开始和停止、正向或反向播放、在特定点之间循环等。
import 'package:flutter/material.dart';
import 'package:lottie/lottie.dart';
void main() => runApp(const MyApp());
class MyApp extends StatefulWidget {
const MyApp({super.key});
@override
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> with TickerProviderStateMixin {
late final AnimationController _controller;
@override
void initState() {
super.initState();
_controller = AnimationController(vsync: this);
}
@override
void dispose() {
_controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: ListView(
children: [
Lottie.asset(
'assets/LottieLogo1.json',
controller: _controller,
onLoaded: (composition) {
// 配置AnimationController的持续时间和启动动画
_controller
..duration = composition.duration
..forward();
},
),
],
),
),
);
}
}
控制Widget大小
你可以像控制Image
widget一样来调整Lottie
widget的大小,通过设置width
和height
属性或者使用fit
参数。
Lottie.asset(
'assets/LottieLogo1.json',
width: 200,
height: 200,
fit: BoxFit.fill,
)
自定义加载
有时你可能想要完全控制文件的加载过程。可以使用AssetLottie
(或NetworkLottie
,MemoryLottie
)来加载Lottie composition。
class MyWidget extends StatefulWidget {
const MyWidget({super.key});
@override
State<MyWidget> createState() => _MyWidgetState();
}
class _MyWidgetState extends State<MyWidget> {
late final Future<LottieComposition> _composition;
@override
void initState() {
super.initState();
_composition = AssetLottie('assets/LottieLogo1.json').load();
}
@override
Widget build(BuildContext context) {
return FutureBuilder<LottieComposition>(
future: _composition,
builder: (context, snapshot) {
var composition = snapshot.data;
if (composition != null) {
return Lottie(composition: composition);
} else {
return const Center(child: CircularProgressIndicator());
}
},
);
}
}
修改运行时属性
可以在运行时修改动画的一些属性,如文本、颜色、透明度和图层位置。
class _Animation extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Lottie.asset(
'assets/Tests/Shapes.json',
delegates: LottieDelegates(
text: (initialText) => '**$initialText**',
values: [
ValueDelegate.color(
const ['Shape Layer 1', 'Rectangle', 'Fill 1'],
value: Colors.red,
),
ValueDelegate.opacity(
const ['Shape Layer 1', 'Rectangle'],
callback: (frameInfo) => (frameInfo.overallProgress * 100).round(),
),
ValueDelegate.position(
const ['Shape Layer 1', 'Rectangle', '**'],
relative: const Offset(100, 200),
),
],
),
);
}
}
帧率
默认情况下,动画按照AfterEffects导出的帧率播放。如果效果不理想,可以通过设置frameRate
参数来更改帧率。
Lottie.asset('anim.json',
frameRate: FrameRate.max, // 使用设备的最大帧率
// 或者使用其他帧率配置...
)
以上就是Lottie for Flutter的基本用法和一些高级特性。希望这些信息能帮助你在项目中更好地利用这个强大的动画库!
更多关于Flutter动画展示插件lottie的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter动画展示插件lottie的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何在Flutter项目中使用Lottie动画展示插件的示例代码。Lottie是一个可以跨平台(包括Flutter)使用的动画库,用于渲染Adobe After Effects中的动画。
1. 添加依赖
首先,在你的pubspec.yaml
文件中添加Lottie的依赖:
dependencies:
flutter:
sdk: flutter
lottie: ^1.0.0 # 请检查最新版本号
然后运行flutter pub get
来安装依赖。
2. 导入Lottie包
在你的Dart文件中导入Lottie包:
import 'package:lottie/lottie.dart';
3. 使用Lottie动画
假设你已经有一个.json
文件,这个文件是从Adobe After Effects导出并使用Lottie工具(如Bodymovin插件)生成的。
示例代码
import 'package:flutter/material.dart';
import 'package:lottie/lottie.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Lottie Animation Example'),
),
body: Center(
child: LottieBuilder.builder(
filename: 'assets/animations/your_animation.json', // 确保你的JSON文件放在assets/animations目录下
width: 300,
height: 300,
fit: BoxFit.cover,
controller: _animationController, // 你可以使用AnimationController来控制动画
repeat: true, // 设置为true来重复动画
reverse: false, // 设置为true来反向播放动画
autoPlay: true, // 设置为true来自动播放动画
),
),
),
);
}
}
// 如果需要控制动画播放,可以定义一个AnimationController
class _LottieAnimationState extends State<MyApp> with SingleTickerProviderStateMixin {
late AnimationController _animationController;
@override
void initState() {
super.initState();
_animationController = AnimationController(
duration: const Duration(seconds: 2),
vsync: this,
)..repeat(reverse: true); // 示例:反向重复播放动画
}
@override
void dispose() {
_animationController.dispose();
super.dispose();
}
}
注意:
-
在上面的代码中,
_LottieAnimationState
类被注释掉了,因为在这个简单示例中,我们直接在LottieBuilder.builder
中使用了autoPlay: true
来自动播放动画。如果你需要更复杂的动画控制(如暂停、恢复、反向等),你应该将controller
参数与一个AnimationController
实例关联,并将动画逻辑放在一个有状态组件中(如StatefulWidget
)。 -
确保你的
.json
文件已经被放置在assets
文件夹下的正确位置,并在pubspec.yaml
中声明:
flutter:
assets:
- assets/animations/your_animation.json
这样,你就可以在Flutter应用中展示Lottie动画了。根据你的需要,你可以进一步自定义动画的播放行为、尺寸和位置等。