国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

開源項(xiàng)目- Lottie 簡介

2019-11-09 16:55:05
字體:
供稿:網(wǎng)友

Airbnb在GitHub上面開源了一個(gè)項(xiàng)目lottie-android,最近火的不要不要的,牢牢占據(jù)Trending排行榜(日、周、月)首位,下面我們就見識一下這個(gè)項(xiàng)目。 首先放上Lottie在GitHub上面的項(xiàng)目地址:Android,iOS, 和React Native。

Lottie簡介

Lottie是一個(gè)為Android和IOS設(shè)備提供的一個(gè)開源框架,它能夠解析通過Adobe After Effects 軟件做出來的動畫,動畫文件通過Bodymovin導(dǎo)出json文件,就可以通過Lottie中的LottieAnimationView來使用了。 Bodymovin是一個(gè)After Effects的插件,它由Hernan Torrisi開發(fā)。 我們先看看官方給出的實(shí)現(xiàn)的動畫效果:

這些動畫如果讓你實(shí)現(xiàn)起來,你可能會覺得很麻煩,但是通過Lottie這一切就變得很容易。 想了解更多請參考官方介紹

使用方法

首先由視覺設(shè)計(jì)師通過Adobe After Effects做好這些動畫,這個(gè)比我們用代碼來實(shí)現(xiàn)會容易的很多,然后Bodymovin導(dǎo)出json文件,這些json文件描述了該動畫的一些關(guān)鍵點(diǎn)的坐標(biāo)以及運(yùn)動軌跡,然后把json文件放到項(xiàng)目的app/src/main/assets目錄下,代碼中在build.gradle中添加依賴:

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

在布局文件上加上:

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

或者代碼中實(shí)現(xiàn):

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

此方法將加載文件并在后臺解析動畫,并在完成后異步開始呈現(xiàn)動畫。 Lottie只支持Jellybean (API 16)或以上版本。 通過源碼我們可以發(fā)現(xiàn)LottieAnimationView是繼承自AppCompatImageView,我們可以像使用其他View一樣來使用它。

LottieAnimationView animationView = (LottieAnimationView) findViewById(R.id.animation_view);

甚至可以從網(wǎng)絡(luò)上下載json數(shù)據(jù):

LottieComposition composition = LottieComposition.fromJson(getResources(), jsonObject, (composition) -> { animationView.setComposition(composition); animationView.playAnimation(); });

或者使用

setAnimation(JSONObject);

我們還可以控制動畫或者添加監(jiān)聽器:

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

LottieAnimationView是使用LottieDrawable來渲染動畫的,如果有必要,還可以直接使用LottieDrawable

LottieDrawable drawable = new LottieDrawable();LottieComposition.fromAssetFileName(getContext(), "hello-world.json", (composition) -> { drawable.setComposition(composition);});

如果動畫會被頻繁的復(fù)用,LottieAnimationView有一套緩存策略,可以使用

LottieAnimationView#setAnimation(String, CacheStrategy)

來實(shí)現(xiàn)它,CacheStrategy可以是StrongWeak或者是None,這樣LottieAnimationView就可以持有一個(gè)已經(jīng)加載和解析動畫的強(qiáng)引用或者弱引用。

先簡單介紹到這里,稍后會帶來Lottie的源碼分析……


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 互助| 银川市| 余庆县| 宜宾市| 永兴县| 得荣县| 聂荣县| 察隅县| 甘南县| 四会市| 吴旗县| 县级市| 德州市| 祁门县| 剑河县| 滕州市| 津南区| 五河县| 宁强县| 泸定县| 无棣县| 平潭县| 富蕴县| 犍为县| 隆昌县| 勐海县| 天长市| 鄂托克旗| 石首市| 冀州市| 隆昌县| 潞城市| 泗阳县| 佛山市| 镇沅| 大渡口区| 资兴市| 万盛区| 平塘县| 铜鼓县| 中阳县|