Android Lottie动画使用
2.在AE中安装一个叫做Bodymovin的插件。 下载 bodymovin,解压缩后只必要\build\extension\bodymovin.zxp这个档案就可以https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=https%3A%2F%2Fuser-gold-cdn.xitu.io%2F2019%2F5%2F26%2F16af365fb19da6f7%3FimageView2%2F0%2Fw%2F1280%2Fh%2F960%2Fignore-error%2F1&pos_id=img-h19QsLiB-1713004640321
3.手动安装plugin,以windows系统而言,要先下载 **ExMan Command Line tool **并解压缩。 再来把下载的bodymovin压缩后的 bodymovin-master\build\extension 目录下的bodymovin.zxp 这个档案复制进去同一个资料夹。
https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=https%3A%2F%2Fuser-gold-cdn.xitu.io%2F2019%2F5%2F26%2F16af36612f6fda79%3FimageView2%2F0%2Fw%2F1280%2Fh%2F960%2Fignore-error%2F1&pos_id=img-ylG3E56e-1713004640322
4.去找cmd,并以系统管理员因素执行。 5.打“cd C:/ExManCmd_win 所在的路径 “,进入ExManCmd的资料夹中 6.接着打 ExManCmd.exe /install bodymovin.zxp 就完成了
https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=https%3A%2F%2Fuser-gold-cdn.xitu.io%2F2019%2F5%2F26%2F16af365fb8319ca8%3FimageView2%2F0%2Fw%2F1280%2Fh%2F960%2Fignore-error%2F1&pos_id=img-XmlJirDZ-1713004640322
7.再来进入AE 后,可以在windows/extentions/bodymovin 找到插件,开启后按下Render 就完成了。 重点来了,这时会在你选的Destination Folder目录中生成一个json格式的文件,这个 json 文件描述了该动画的一些关键点的坐标以及活动轨迹。
https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=https%3A%2F%2Fuser-gold-cdn.xitu.io%2F2019%2F5%2F26%2F16af365fbde73327%3FimageView2%2F0%2Fw%2F1280%2Fh%2F960%2Fignore-error%2F1&pos_id=img-bfoCOw1Q-1713004640323
三、如何使用Lottie
Lottie支持多平台,使用同一个JSON动画文件,可在差别平台实现相同的效果。支持Android,ios,前段。
1.依靠
在项目标 build.gradle 文件添加依靠
dependencies {
compile ‘com.airbnb.android:lottie:2.1.0’
}
2.动画文件
第一种方法,将我们所必要的动画文件loading.json保存在app/src/main/assets文件里。 第二种方法,网络上AE生成的动画文件。(网络链接)
3.使用
在布局文件中使用
<com.airbnb.lottie.LottieAnimationView
android:id=“@+id/animation_view”
android:layout_width=“400dp”
android:layout_height=“400dp”
app:lottie_fileName=“loading.json”
app:lottie_loop=“true”
app:lottie_autoPlay=“true”/>
使用网络加载AE生成的动画文件json
private void loadUrl(String url) {
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if (response.isSuccessful()) {
try {
JSONObject json = new JSONObject(response.body().string());
LottieComposition.Factory
.fromJson(getResources(), json, new OnCompositionLoadedListener() {
@Override
public void onCompositionLoaded(LottieComposition composition) {
setComposition(composition);
}
});
} catch (JSONException e) {
}
}
}
});
}
private void setComposition(LottieComposition composition){
animation_view.setProgress(0);
animation_view.loop(true);
animation_view.setComposition(composition);
animation_view.playAnimation();
}
四、Lottie实现原理
https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=https%3A%2F%2Fuser-gold-cdn.xitu.io%2F2019%2F5%2F26%2F16af365fba268546%3FimageView2%2F0%2Fw%2F1280%2Fh%2F960%2Fignore-error%2F1&pos_id=img-9vtCnJ4N-1713004640323
设计师把一张复杂的图片使用多个图层来表示,每个图层展示一部分内容,图层中的内容也可以拆分为多个元素。拆分元素之后,根据动画需求,可以单独对图层大概图层中的元素做平移、旋转、收缩等动画。
Lottie的使用的资源是必要先通过bodymovin( bodymovin 插件自己是用于网页上呈现各种AE效果的一个开源库)将 Adobe After Effects (AE)生成的aep动画工程文件转换为通用的json格式描述文件。Lottie则负责剖析动画的数据,盘算每个动画在某个时间点的状态,正确地绘制到屏幕上。
Lottie主要类图:
https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=https%3A%2F%2Fuser-gold-cdn.xitu.io%2F2019%2F5%2F26%2F16af36605a47bbbf%3FimageView2%2F0%2Fw%2F1280%2Fh%2F960%2Fignore-error%2F1&pos_id=img-7MDAAjyo-1713004640323
Lottie对外通过控件LottieAnimationView暴露接口,控制动画。
LottieAnimationView继续自ImageView,通过当前时间绘制canvas显示到界面上。这里有两个关键类:LottieComposition 负责剖析json描述文件,把json内容转成Java数据对象;LottieDrawable负责绘制,把LottieComposition转成的数据对象绘制成drawable显示到View上。顺序如下:
https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=https%3A%2F%2Fuser-gold-cdn.xitu.io%2F2019%2F5%2F26%2F16af36605e50bce9%3FimageView2%2F0%2Fw%2F1280%2Fh%2F960%2Fignore-error%2F1&pos_id=img-eZvXTS7o-1713004640323
剖析json外部结构 LottieComposition封装整个动画的信息,包括动画巨细,动画时长,帧率,用到的图片,字体,图层等等。
{
“v”: “4.6.0”, //bodymovin的版本
“fr”: 29.9700012207031, //帧率
“ip”: 0, //起始关键帧
“op”: 141.000005743048, //结束关键帧
“w”: 800, //动画宽度
“h”: 800, //动画高度
“ddd”: 0,
“assets”: […] //资源信息
“layers”: […] //图层信息
}
剖析图片资源
“assets”: [ //资源信息
{ //第一张图片
“id”: “image_0”, //图片id
“w”: 58, //图片宽度
“h”: 31, //图片高度
“u”: “images/”, //图片路径
“p”: “img_0.png” //图片名称
},
{…} //第n张图片
]
剖析图层
“layers”: [ //图层信息
{ //第一层动画
“ddd”: 0,
“ind”: 0, //layer id 图层 id
“ty”: 4, //图层类型
“nm”: “center_circle”,
“ks”: {…}, //动画
“ao”: 0,
“shapes”: […],
“ip”: 0, //inFrame 该图层起始关键帧
“op”: 90, //outFrame 该图层结束关键帧
“st”: 0, //startFrame 开始
“bm”: 0,
“sr”: 1
},
{…} //第n层动画
]
如何动起来 时序图
https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=https%3A%2F%2Fuser-gold-cdn.xitu.io%2F2019%2F5%2F26%2F16af366070cbbbfb%3FimageView2%2F0%2Fw%2F1280%2Fh%2F960%2Fignore-error%2F1&pos_id=img-5pxXbdNi-1713004640323
利用属性动画控制进度,每次进度改变通知到每一层,触发LottieAnimationView重绘。 代码如下:
public LottieDrawable() {
animator.setRepeatCount(0);
animator.setInterpolator(new LinearInterpolator());
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
if (systemAnimationsAreDisabled) {
animator.cancel();
setProgress(1f);
} else {
setProgress((float) animation.getAnimatedValue());
}
}
});
}
通过CompositionLayer把进度通报到各个图层
@Override
public void setProgress(@FloatRange(from = 0f, to = 1f) float progress) {
super.setProgress(progress);
if (timeRemapping != null) {
long duration = lottieDrawable.getComposition().getDuration();
long remappedTime = (long) (timeRemapping.getValue() * 1000);
progress = remappedTime / (float) duration;
}
if (layerModel.getTimeStretch() != 0) {
progress /= layerModel.getTimeStretch();
}
progress -= layerModel.getStartProgress();
for (int i = layers.size() - 1; i >= 0; i–) {
layers.get(i).setProgress(progress);
}
}
通知进度改变
void setProgress(@FloatRange(from = 0f, to = 1f) float progress) {
if (progress < getStartDelayProgress()) {
progress = 0f;
} else if (progress > getEndProgress()) {
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提拔技能,每每是自己摸索成长大概是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易遇到天花板技术停滞不前!
因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简朴,就是盼望能够资助到想自学提拔又不知道该从何学起的朋侪,同时减轻大家的负担。
https://img-blog.csdnimg.cn/img_convert/e26a2747401213685cc2ec127ad5993e.png
https://img-blog.csdnimg.cn/img_convert/168072519338058bd9e5bea8d587b297.png
https://img-blog.csdnimg.cn/img_convert/8cd07d4056d8da6cc472681baa844aa1.png
https://img-blog.csdnimg.cn/img_convert/1270f8a0ef620b5f8e76b9e462955cd1.png
https://img-blog.csdnimg.cn/img_convert/a4ce6342f6a06f38c18f1712426ff225.png
既有恰当小白学习的零基础资料,也有恰当3年以上履历的小伙伴深入学习提拔的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点内里都包含大厂面经、学习笔记、源码课本、实战项目、讲授视频,并且会持续更新!
如果你觉得这些内容对你有资助,可以扫码获取!!(备注:Android)
https://img-blog.csdnimg.cn/img_convert/f1765f8f5f354651f0672607c720471a.jpeg Android进阶资料
以下的资料是比年来,我和一些朋侪口试收集整理了很多大厂的口试真题和资料,尚有来自如阿里、小米、爱奇艺等一线大厂的大牛整理的架构进阶资料。盼望可以资助到大家。
Android进阶核心笔记
https://img-blog.csdnimg.cn/img_convert/d0ab32c72d615cfff0c62117f5dc3cd3.webp?x-oss-process=image/format,png
百万年薪必刷口试题
https://img-blog.csdnimg.cn/img_convert/a6c13465d4536c784dd73feeaca69357.webp?x-oss-process=image/format,png
最全Android进阶学习视频
《互联网大厂口试真题剖析、进阶开发核心学习笔记、全套讲授视频、实战项目源码课本》点击传送门即可获取!
链图片转存中…(img-IWAogIej-1713004640324)]
百万年薪必刷口试题
[外链图片转存中…(img-9Xo6ldcD-1713004640325)]
最全Android进阶学习视频
《互联网大厂口试真题剖析、进阶开发核心学习笔记、全套讲授视频、实战项目源码课本》点击传送门即可获取!
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]