lottie,一个强大的移动端动画库

痕迹天涯119 痕迹天涯119     2022-11-06     423

关键词:

Lottie是一个针对移动端打造的动画库,其内部根据json解析出的路径在onDraw下绘制多个图层的每一帧动画实现高效流畅的效果,本文简单介绍其使用,以帮助读者更好的理解。

通过Gradle添加依赖

dependencies   
  compile 'com.airbnb.android:lottie:2.1.0'

使用方式一:XML加载

<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" />

其中三个自定义属性分别对应了json文件在Assert文件夹下的名称,动画是否循环,是否自动播放动画。

使用方式二:代码加载

LottieAnimationView animationView = (LottieAnimationView) findViewById(R.id.animation_view);
animationView.setAnimation("hello-world.json");
animationView.loop(true);
animationView.playAnimation();

对于以上的两种方式而言比较适合单一的动画加载,如果需要在RecyclerView等控件中展示多个相同的动画,请使用下面的方式

 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();

和属性动画类似,Lottie具有高度的可控性

animationView.addAnimatorUpdateListener((animation) -> 
    // Do something.
);
animationView.playAnimation();
...
if (animationView.isAnimating()) 
    // Do something.

...
animationView.setProgress(0.5f);
...
// Custom animation speed or duration.
ValueAnimator animator = ValueAnimator.ofFloat(0f, 1f)
    .setDuration(500);
animator.addUpdateListener(animation -> 
    animationView.setProgress(animation.getAnimatedValue());
);
animator.start();
...
animationView.cancelAnimation();

在最新的2.1.0版本下,你能轻松的为动画添加ColorFilter

// Any class that conforms to the ColorFilter interface
final PorterDuffColorFilter colorFilter = new PorterDuffColorFilter(Color.RED, PorterDuff.Mode.LIGHTEN);

// Adding a color filter to the whole view
animationView.addColorFilter(colorFilter);

// Adding a color filter to a specific layer
animationView.addColorFilterToLayer("hello_layer", colorFilter);

// Adding a color filter to specfic content on the "hello_layer"
animationView.addColorFilterToContent("hello_layer", "hello", colorFilter);

// Clear all color filters
animationView.clearColorFilters();

同样,Lottie也支持通过XML的方式添加ColorFilter,此时的合并规则为PorterDuff.Mode.SRC_ATOP:

<com.airbnb.lottie.LottieAnimationView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:lottie_fileName="hello-world.json"
        app:lottie_colorFilter="@color/blue" />

通过LottieComposition.Factory的默认方法加载json文件

fromAssetFileName:从Assert文件夹下加载资源文件
fromFileSync:同上,但是同步的加载方式
fromInputStream:从文件流加载
fromJson(Resources res, JSONObject json,OnCompositionLoadedListener loadedListener):通过JSONObject的方式加载网络文件

简单的加载的演示:

        LottieComposition.Factory.fromAssetFileName(this, "hello-world.json", new OnCompositionLoadedListener() 
            @Override
            public void onCompositionLoaded(@Nullable LottieComposition composition) 
                if (composition != null) 
                    lav.setComposition(composition);
                
                lav.playAnimation();
            
        );

如果你的json文件附带了图片资源并放置在Assert或其子文件夹下,那么请使用setImageAssetsFolder指明对应路径,如

call setImageAssetsFolder(images/hello)

如果你需要加载非assert下的图片资源请通过如下方式

animationView.setImageAssetDelegate(new ImageAssetDelegate() 
         @Override public Bitmap fetchBitmap(LottieImageAsset asset) 
           getBitmap(asset);
         
       );

LottieImageAsset用于帮助指定Bitmap的宽高等信息。


基本就是一篇翻译文了,写的比较快,有什么疑问可以留言讨论。

lottie-移动动画效果框架

Lottie简介    Airbnb开源了一个名叫Lottie的动画库,他同时支持ios,android,react_native。Android:https://github.com/airbnb/lottie-androidiOS:https://github.com/airbnb/lottie-iosReactNative:https://github.com/a 查看详情

移动端动效

1)上下滚动回弹functionswipe(){//需求: //1、获取要滚动的ul及ul的父级var ulFather=document.querySelector(‘.container‘);varul=ul.querySelector(‘ul‘);//2、获取滚动正常范围varstartY=0;varmoveY=0;//滚动的距离vardist=0;//当前ul滚动位置v 查看详情

[uwp]在uwp平台中使用lottie动画(代码片段)

...Lottie动画的东西吧!Lottie动画的UWP实现Lottie是Airbnb开源的一个面向IOS、Android、ReactNative的动画库,它可以解析保存为json格式的由Bodymovin导出的使用AE制作的动画效果,并在移动端/Web端呈现它们!官方支援平台为IOS、Android和ReactNa... 查看详情

这样做动画交互,一点都不费力!(代码片段)

本文由云+社区发表作者:paulzeng导语:Lottie是Airbnb开源的一个面向iOS、Android、ReactNative的动画库,可实现非常复杂的动画,使用也及其简单,极大释放人力,值得一试。一、简介Lottie是Airbnb开源的一个面向iOS、Android、ReactNative的... 查看详情

reactnative实现lottie动画(代码片段)

Lottie是Airbnb开源的一个面向iOS、Android、ReactNative的动画库,能加载AdobeAfterEffects导出的动画,并且能让原生App像使用静态素材一样使用这些动画,完美实现炫酷的动画效果。使用流程上,Lottie动画需要先使用AdobeAfterEffects做出原... 查看详情

封装android带lottie动画的底部导航栏(代码片段)

什么是Lottie动画Lottie是Airbnb开源的一个面向iOS、Android、ReactNative的动画库,能分析AdobeAfterEffects导出的动画,并且能让原生App像使用静态素材一样使用这些动画,完美实现动画效果,动画效果比原生动画要优美很... 查看详情

封装android带lottie动画的底部导航栏(代码片段)

什么是Lottie动画Lottie是Airbnb开源的一个面向iOS、Android、ReactNative的动画库,能分析AdobeAfterEffects导出的动画,并且能让原生App像使用静态素材一样使用这些动画,完美实现动画效果,动画效果比原生动画要优美很... 查看详情

reactnative实现lottie动画(代码片段)

Lottie是Airbnb开源的一个面向iOS、Android、ReactNative的动画库,能加载AdobeAfterEffects导出的动画,并且能让原生App像使用静态素材一样使用这些动画,完美实现炫酷的动画效果。使用流程上,Lottie动画需要先使用AdobeAfterEffects做出原... 查看详情

wpf加载.json动画

...需要通过控件去访问方法。 参考技术BLottie是Airbnb开源的一个面向iOS、Android、ReactNative的动画库,能分析AdobeAfterEffects导出的动画,并且能让原生App像使用静态素材一样使用这些动画,完美实现动画效果。在 查看详情

tween.js

...滑动画效果的js动画库。相关的动画库插件还有:snabbt.js强大的jQuery动画库插件和Tweene-超级强大的jQuery动画代理插件。tween.js允许你以平滑的方式修改元素的属性值。你只需要告诉tween你想修改什么值,以及动画结束时它的最终... 查看详情

带有 Lottie 动画的动态按钮

...animation【发布时间】:2020-03-1413:07:45【问题描述】:我有一个简单的UIButton和一个title:letsignUpButton:CustomButton=letv=CustomButton(type:.system)v.translatesAutoresizingMaskIntoConstraints=false 查看详情

解决electron应用中lottie动画无法正常显示(代码片段)

我们用FlutterWeb开发了一个应用,通过electron进行打包成可执行文件,但是在使用时发现了一个问题,Lottie动画无法显示。通过console的日志可以看到,提示lottie是undifine的,lottie是sdk提供的一个全局的对象,... 查看详情

从移动设备到服务器的强大文件传输[关闭]

...【发布时间】:2012-10-1304:54:21【问题描述】:我需要的是一个解决方案(一个库),用于从移动设备(iOS、Android)到服务器(PHP)的文件传输。基本要求是文件应该被分成块,这样如果在发送文件的过程中数据连接丢失,我不... 查看详情

Lottie 动画在 SwiftUI 的最后一个 TabView 页面上消失

】Lottie动画在SwiftUI的最后一个TabView页面上消失【英文标题】:LottieanimationdisappearsonlastTabViewpageinSwiftUI【发布时间】:2020-10-1911:54:24【问题描述】:我有一个有六页的TabView。动画在最后一页。当我查看最后一页时,动画会显示片... 查看详情

[uwp]缓存lottie动画帧(代码片段)

...我们使用了LottieAnimationView控件来播放Lottie动画,其实另一个类LottieDrawable也可以完成同样的工作,并且更易扩展。下面我们就来修改下LottieDrawable类,让它可以返回给我们某一时刻的帧图像。在LottieDrawable类中,Lottie动画的播放... 查看详情

lottie-让android动画实现更简单

Lottie是什么?Lottie是Airbnb开源的一个支持Android、iOS以及ReactNative,利用json文件的方式快速实现动画效果的库。这么看可能很难理解,接下来我将详细的讲解如何使用。Lottie项目地址:https://github.com/airbnb/lottie-androi... 查看详情

从0到1,开发一个动画库(代码片段)

传送门:从0到1,开发一个动画库(1)上一节讲到了最基础的内容,为动画构建“帧-值”对应的函数关系,完成“由帧到值”的计算过程。这一节将在上节代码的基础上谈谈如何给一个完整的动画添加各类事件。在添加各类事件之... 查看详情

用javascript实现三次贝塞尔动画库-前端组件化(代码片段)

...0]坐标到[1,1]坐标移动的轨迹。我们的timingFunction也是这样一个函数,传入我们的时间进度,从而获得一个三次贝塞尔曲线的移动轨迹的进度。TimingFunctionTimingFunction是一个关于0~1的time(时间)的函数,通... 查看详情