Lottie使用及源码详解

前言:Lottie对于我们安卓开发人员来说就是实现复杂动画效果的神器,越来越多的项目中使用了Lottie来实现复杂好看的动画并因此提高的动画的开发成本和效率,当然我们的项目也开始使用Lottie了。下面这些动画在之前看着感觉实现起来很亚历山大,有了Lottie就很简单了。

Lottie 是Airbnb开源的动画实现项目,支持Android、iOS、ReactNaitve三大平台。Lottie 的使用前提是需要先通过插件 bodymovin 将 Adobe After Effects (AE)生成的 aep 动画工程文件转换为通用的 json 格式描述文件( bodymovin 插件本身是用于网页上呈现各种AE效果的一个开源库)。Lottie 所做的事情就是实现在不同移动端平台上呈现AE动画的方式,从而达到动画文件的一次绘制、一次转换,随处可用的效果。

怎么使用

1.添加依赖

 dependencies {  
        compile 'com.airbnb.android:lottie:$lottieVersion'
 }

2. 使用

Lottie支持Android  API 16 及以上的系统版本, 最简单的使用方式是直接在布局文件中添加:

    <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_autoPlay="true" />

你也可以选择使用 Java 代码的方式进行动画加载,从app/src/main/assets获取json文件:

LottieAnimationView animationView = (LottieAnimationView)findViewById(R.id.animation_view);
animationView.setAnimation("hello-world.json");
animationView.loop(true);//设置动画是否循环播放,true表示循环播放,false表示只播放一次
animationView.playAnimation();

这种方式会在后台进行一次性的异步文件加载和动画渲染工作 。

如果你想重复利用一个动画效果,例如在列表的每个项目中,或者从一个网络请求的返回中解析JSONObject对象,你可以采用如下方式先生成一个Cancellable, 然后进行设置:

LottieAnimationView animationView = (LottieAnimationView) findViewById(R.id.animation_view);
 ...
Cancellable compositionCancellable = LottieComposition.Factory.fromJson(getResources(), jsonObject, 
     new OnCompositionLoadedListener() {
         @Override public void onCompositionLoaded(LottieComposition composition) {
                animationView.setComposition(composition);
                animationView.playAnimation();
         }
     });
// Cancel to stop asynchronous loading of composition
// compositionCancellable.cancel();

在动画执行过程中你可以通过如下方式控制动画或者添加监听:

 animationView.addAnimatorUpdateListener(//监听动画进度
        new ValueAnimator.AnimatorUpdateListener() {
          @Override public void onAnimationUpdate(ValueAnimator animation) {
               // Do something.
          }
        });

 animationView.playAnimation();//开始动画
 ...
 animationView.cancelAnimation();//结束动画
 ...
 animationView.pauseAnimation();//暂停动画
 ...
 animationView.resumeAnimation();//重启动画
 ...
 animationView.setScaleX(0.5f);//设置X轴方向上的缩放比例,0f为不可见,1f原始大小 Ps.原setScale方法在2.0.0版本后已弃用
 animationView.setScaleY(0.5f);//设置Y轴方向上的缩放比例
 ...
 if (animationView.isAnimating()) {//动画正在进行中
     // Do something.
 }
 ...
 animationView.setProgress(0.5f);//手动设置动画进度
 ...
 // Custom animation speed or duration.
 ValueAnimator animator = ValueAnimator.ofFloat(0f, 1f)//自定义一个属性动画
     .setDuration(500);
 animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
      @Override
      pu
  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值