Android Lottie动画的简单使用

简介

在Android中做动画效果无非是以下几种方法:

  1. 普通动画
  2. 帧动画
  3. 属性动画
  4. 通过改变LayoutParams布局参数来实现动画

现如今在Github上有一个比较火的动画库Lottie,Github上关于Lottie库介绍大概是这样的: 
Lottie是一个为Android和iOS设备提供的一个开源框架,它能够解析通过Adobe After Effects 软件做出来的动画,动画文件通过Bodymovin导出json文件,然后由Lottie中的LottieAnimationView解析json渲染动画。 
官方给出来的demo动画效果如下:

这里写图片描述

也就是说Lottie框架可以通过解析json文件来实现动画效果,而无需开发写太多的代码去控制动画。

Lottie Github地址:https://github.com/airbnb/lottie-android

Lottie的使用

1.下载Lottie库

在你工程的build.gradle文件里添加如下配置

  dependencies {  
  compile 'com.airbnb.android:lottie:1.5.3'
  }

2.简单使用

Lottie支持API14以及以上,动画简单使用实例如下:

<com.airbnb.lottie.LottieAnimationView
        android:id="@+id/animation_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:lottie_fileName="hello-world.json"
        app:lottie_loop="true"
        app:lottie_imageAssetsFolder="images"
        app:lottie_autoPlay="true" />

如此,动画就能跑起来了,解释下一下属性: 
1.lottie_fileName:在app/src/main/assets目录下的动画json文件名。 
2.lottie_loop:动画是否循环播放,默认不循环播放。 
3.lottie_autoPlay:动画是否自动播放,默认不自动播放。 
4.lottie_imageAssetsFolder:动画所依赖的图片目录,在app/src/main/assets/目录下的子目录,该子目录存放所有图片。

你还可以在代码中这样使用:

LottieAnimationView animationView = (LottieAnimationView) findViewById(R.id.animation_view);
animationView.setAnimation("hello-world.json");//在assets目录下的动画json文件名。
animationView.loop(true);//设置动画循环播放
animationView.setImageAssetsFolder("images/");//assets目录下的子目录,存放动画所需的图片
animationView.playAnimation();//播放动画

Lottie框架会在后台自动解析json动画配置文件,解析完后开始跑动画。

你也可以这样使用LottieAnimationView:

 LottieAnimationView animationView = (LottieAnimationView) findViewById(R.id.animation_view);
 ...
 Cancellable compositionCancellable = LottieComposition.Factory.fromJson(getResources(), jsonObject, (composition) -> {
     animationView.setComposition(composition);
     animationView.playAnimation();
 });

 // Cancel to stop asynchronous loading of composition
 // compositionCancellable.cancel();

3.控制动画添加动画监听

animationView.addAnimatorUpdateListener((animation) -> {
    // Do something.动画状态监听回调
});
animationView.playAnimation();//播放动画
...
if (animationView.isAnimating()) {
    // Do something.动画正在运行
}
...
//progress范围0~1f,设置动画进度
animationView.setProgress(0.5f);
...
// 自定义动画时长,此处利用ValueAnimator值动画来实时更新AnimationView的进度来达到控制动画时长。
ValueAnimator animator = ValueAnimator.ofFloat(0f, 1f)
    .setDuration(500);
animator.addUpdateListener(animation -> {
    animationView.setProgress(animation.getAnimatedValue());
});
animator.start();//启动动画
...
animationView.cancelAnimation();//取消动画

由以上代码可知:你可以随意控制动画的时常,动画的播放进度,动画的各种状态等。

Lottie动画缓存策略

由于Lottie框架是解析json文件来做动画效果的,解析json文件是I/O耗时操作,为了提高动画加载速度,在同一个动画需要多处多次使用时,就有必要对解析json的结果进行缓存,以免每次都解析json文件耗时操作。所以Lottie框架提供了三种不同程度的动画缓存策略:

  /**
   * Caching strategy for compositions that will be reused frequently.
   * Weak or Strong indicates the GC reference strength of the composition in the cache.
   */
  public enum CacheStrategy {
    None,
    Weak,
    Strong
  }
  • None 无缓存
  • Weak 弱引用缓存
  • Strong 强引用缓存

。你可以按照如下方法使用:

1.在LottieAnimationView控件的布局中添加如下属性:

app:lottie_cacheStrategy="weak"

 

默认情况下是无缓存的。

2.你也可以在代码中如此使用:

animationView.setAnimation("hello_world.json", LottieAnimationView.CacheStrategy.Weak);

 

如果第二个参数未设置时,默认无缓存。

 

 

转载至:https://blog.csdn.net/feiduclear_up/article/details/61923626

### Lottie 动画简介与使用教程 Lottie 是一种强大的工具,旨在简化 Android 应用程序中复杂动画的实现过程[^2]。通过 JSON 文件描述动画效果,开发者无需编写大量代码即可完成高质量的动画展示。以下是关于如何使用 Lottie 的详细说明以及可能遇到的问题解决方案。 --- #### 一、环境准备 在开始使用 Lottie 之前,需确保已正确设置开发环境并引入必要的依赖项。对于 Android 开发者来说: 1. **添加 Gradle 依赖** 在项目的 `build.gradle` 文件中加入以下内容: ```gradle implementation &#39;com.airbnb.android:lottie:5.2.0&#39; // 版本号可能会更新,请查阅官方文档确认最新版本 ``` 2. **同步项目** 添加完成后,点击 “Sync Now” 同步项目以下载所需库文件。 --- #### 二、基本使用方法 ##### 1. XML 集成方式 可以通过布局文件直接定义 Lottie 动画控件: ```xml <com.airbnb.lottie.LottieAnimationView android:id="@+id/animation_view" android:layout_width="wrap_content" android:layout_height="wrap_content" app:lottie_fileName="example.json" <!-- 动画资源路径 --> app:lottie_loop="true" <!-- 是否循环播放 --> app:lottie_autoPlay="true" /> <!-- 自动播放 --> ``` ##### 2. Java/Kotlin 编程方式 如果需要动态控制动画行为,则可通过编程方式进行操作: ```kotlin val animationView = findViewById<LottieAnimationView>(R.id.animation_view) // 加载本地 JSON 资源 animationView.setAnimation("example.json") // 设置属性 animationView.loop(true) // 循环播放 animationView.playAnimation() // 手动触发播放 // 控制进度条(可选) animationView.progress = 0.5f // 设定当前播放位置为一半 ``` --- #### 三、高级功能与技巧 1. **自定义颜色替换** 支持运行时修改特定图层的颜色,增强灵活性。 ```kotlin val colorFilter = object : ColorFilter { override fun filter(color: Int): Int { return ContextCompat.getColor(this@MainActivity, R.color.new_color) } } animationView.addValueCallback( KeyPath("**"), // 表示作用于所有对象 LottieProperty.COLOR, colorFilter ) ``` 2. **网络加载远程动画** 当动画存储在网络服务器上时,可以直接通过 URL 获取数据流加载。 ```kotlin animationView.setAnimationFromUrl("https://example.com/example.json") ``` 3. **嵌入式 Animation Data** 如果不想单独管理外部文件,也可以将整个 JSON 数据硬编码至应用内部传递给 API。 ```javascript const animationData = { /* 定义完整的 JSON 结构 */ }; const config = { container: document.getElementById(&#39;container&#39;), renderer: &#39;svg&#39;, loop: true, autoplay: true, animationData: animationData }; lottie.loadAnimation(config); ``` --- #### 四、常见问题及其解决办法 | 问题 | 描述 | 解决方案 | |------|------|----------| | 动画无法正常显示 | 可能由于缺少对应字体或图片素材导致渲染失败 | 确认 JSON 中引用的所有资产均已打包进 APK;或者尝试启用 `useBitmaps=true` 参数替代矢量绘制模式 | | 性能下降明显 | 复杂度较高的场景下容易造成卡顿现象 | 减少不必要的透明区域裁剪优化 GPU 渲染效率;适当降低分辨率尺寸适应目标设备屏幕大小 | --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值