Flutter动画渲染插件lottie_native的使用
Flutter动画渲染插件lottie_native的使用
lottie_native
是一个用于在Flutter应用中渲染Lottie动画的插件,它利用了原生平台的库来实现动画渲染。
使用的原生平台库
- iOS: lottie-ios
- Android: lottie-android
这个插件是从 flutter_lottie
分叉而来的。
示例代码
以下是一个完整的示例demo,展示了如何使用 lottie_native
插件来加载和控制Lottie动画。
完整示例代码
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:lottie_native/lottie_native.dart';
// 假设PageDragger是自定义的拖动页面组件
import 'page_dragger.dart';
void main() => runApp(MyApp());
class MyApp extends StatefulWidget {
[@override](/user/override)
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
LottieController? controller;
LottieController? controller2;
late StreamController<double> newProgressStream;
// 构造函数初始化StreamController
_MyAppState() {
newProgressStream = new StreamController<double>();
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: PageDragger(
stream: this.newProgressStream,
child: Scaffold(
appBar: AppBar(
title: const Text('Lottie'),
),
body: Center(
child: Column(
children: <Widget>[
SizedBox(
width: 150,
height: 150,
child: LottieView.fromURL(
url:
'https://raw.githubusercontent.com/airbnb/lottie-ios/master/Tests/Samples/Watermelon.json',
autoPlay: true, // 自动播放
loop: true, // 循环播放
reverse: true, // 反向播放
onViewCreated: onViewCreated, // 视图创建完成后的回调
),
),
TextButton(
child: Text("Play"),
onPressed: () {
controller?.play(); // 播放动画
},
),
TextButton(
child: Text("Stop"),
onPressed: () {
controller?.stop(); // 停止动画
},
),
TextButton(
child: Text("Pause"),
onPressed: () {
controller?.pause(); // 暂停动画
},
),
TextButton(
child: Text("Resume"),
onPressed: () {
controller?.resume(); // 继续播放动画
},
),
Text("From File"), // 从文件加载动画
Container(
child: SizedBox(
width: 150,
height: 150,
child: LottieView.fromAsset(
filePath: "animations/newAnimation.json", // 文件路径
autoPlay: true, // 自动播放
loop: true, // 循环播放
reverse: true, // 反向播放
onViewCreated: onViewCreatedFile, // 视图创建完成后的回调
),
),
),
TextButton(
child: Text("Change Color"), // 改变颜色
onPressed: () {
// 设置KeyPath的颜色
this.controller2?.setValue(
value: LOTColorValue.fromColor(
color: Color.fromRGBO(0, 0, 255, 1),
),
keyPath: "body Konturen.Gruppe 1.Fläche 1",
);
// 设置KeyPath的透明度
this.controller2?.setValue(
value: LOTOpacityValue(opacity: .1),
keyPath: "body Konturen.Gruppe 1.Fläche 1",
);
},
),
Text("Drag anywhere to change animation progress"), // 拖动以改变动画进度
],
),
),
),
),
);
}
void onViewCreated(LottieController controller) {
this.controller = controller;
// 监听播放完成事件
controller.onPlayFinished.listen((bool animationFinished) {
print("Playback complete. Was Animation Finished? $animationFinished");
});
}
void onViewCreatedFile(LottieController controller) {
this.controller2 = controller;
newProgressStream.stream.listen((double progress) {
this.controller2?.setAnimationProgress(progress); // 设置动画进度
});
}
void dispose() {
super.dispose();
newProgressStream.close(); // 关闭StreamController
}
}
更多关于Flutter动画渲染插件lottie_native的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter动画渲染插件lottie_native的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中使用lottie_native
插件来渲染Lottie动画的示例代码。lottie_native
是一个性能优化的Lottie动画渲染插件,适用于Flutter。
首先,确保你已经将lottie_native
添加到你的pubspec.yaml
文件中:
dependencies:
flutter:
sdk: flutter
lottie_native: ^x.y.z # 请替换为最新版本号
然后,运行flutter pub get
来安装依赖。
使用Lottie动画
-
准备Lottie动画文件
你需要一个
.json
格式的Lottie动画文件。这个文件可以从LottieFiles或其他资源网站下载。 -
创建Flutter项目并导入Lottie动画
在你的Flutter项目中,创建一个新的Dart文件(例如
main.dart
),然后按照以下代码来加载和显示Lottie动画:
import 'package:flutter/material.dart';
import 'package:lottie_native/lottie_native.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Lottie Native Example'),
),
body: Center(
child: LottieNativeView(
// 指定Lottie动画文件的路径(本地文件路径或网络URL)
filenameOrUrl: 'assets/animation.json', // 确保你的.json文件已放在assets目录下
// 可选参数:动画循环次数,默认为1(播放一次)
loopCount: LottieLoopCount.infinite, // 无限循环
// 可选参数:动画速度,默认为1.0(正常速度)
speed: 1.0,
// 可选参数:动画的初始帧,默认为0
initialFrame: 0,
// 可选参数:动画是否自动播放,默认为true
autoPlay: true,
// 可选参数:动画尺寸,可以设置为具体尺寸或BoxFit模式
size: Size(300, 300), // 例如设置为300x300
// 可选参数:动画加载完成回调
onLoad: (composition) {
print('Lottie animation loaded');
},
// 可选参数:动画播放完成回调
onAnimationFinish: () {
print('Lottie animation finished');
},
// 可选参数:动画播放帧回调
onAnimationFrame: (frameInfo) {
// frameInfo.currentFrame: 当前帧
// frameInfo.totalFrames: 总帧数
print('Current frame: ${frameInfo.currentFrame}, Total frames: ${frameInfo.totalFrames}');
},
),
),
),
);
}
}
-
添加Lottie动画文件到assets
确保你的
.json
文件已放在assets
文件夹中,并在pubspec.yaml
文件中声明它:
flutter:
assets:
- assets/animation.json
-
运行项目
现在你可以运行你的Flutter项目,你应该能够看到你的Lottie动画在屏幕上播放。
注意事项
lottie_native
插件的性能通常比lottie-flutter
更优,特别是在处理复杂动画时。- 确保你的Lottie动画文件是有效的
.json
格式。 - 你可以根据需要调整动画的加载、播放和回调参数。
以上就是在Flutter项目中使用lottie_native
插件来渲染Lottie动画的基本步骤和示例代码。希望对你有所帮助!