前语

之前的文章也常常提及矢量动画的一些特效,矢量动画肯定是优先会考虑用特色动画去完成。可是关于非矢量动画,完成的方法就比较多了,甚至需求依据不同的场景去挑选不同的完成方法,这儿就浅谈一些常用的非矢量动画方法,只是做一些简略的介绍,不会去涉及其原理。

1. gif动画

gif动画也是很早之前比较盛行的非矢量动画的完成方法,由于它的完本钱钱比较低,在前期人员配置还不像现在这等规划的情况下,gif去完成动画的作用是一种相对简略的方法。

它的长处是:
(1)在各种渠道和浏览器上广泛支撑,由于呈现得比较早,在兼容性这方面来说现已做得比较好了
(2)制造和分享简略,适合制造时间短动画
(3)支撑透明度和循环播映功用

它的缺陷是:
(1)终究的作用图画质量较低
(2)文件巨细比较大

它的完成也非常简略,Glide老早就支撑播映gif格局的图片了。

总的来说便是老古董,以前用得多,兼容性比较好,可是由于图画质量和文件巨细等原因,现在很少运用

2. WebP动画

WebP是google在2010年9月推出的。它能供给更高效的图画紧缩,一起保持杰出的图画质量。

它的长处是:
(1)支撑有损和无损紧缩,能够在保持图画质量的一起减小文件巨细。
(2)文件一般都不算大
(3)在网页传输中效率高,具有杰出的浏览器支撑

它的缺陷是:
(1)兼容性相对不算好,由于是比较晚才提出的技能
(2)需求特定的控件来播映

它的完成也简略,和gif相同,Glide也支撑webp的播映,可是我印象中是在3.7.0版别之后才支撑的。

归纳来说便是,它的紧缩作用比较好,终究的动画图画作用也不会差,关于比较小的动画而言,很值得运用,关于android来说完成起来也方便

并且不光是动画,像咱们现在放在AS中的静态图片资源,也需求换成webp

3. Lottie动画

Lottie动画是由Airbnb开发的一种动画文件格局和库,是在2017年提出的,用于展现高端矢量动画。

这个有点特殊,这儿明明是介绍非矢量动画的完成,可是Lottie的宗旨其实还是矢量动画。这是由于尽管咱们矢量动画优先引荐用原生特色动画来做,可是有些比较杂乱,用原生来做比较耗时,性价比就不算高,所以能够用Lottie来完成杂乱的矢量动画,并且Lottie也支撑非特色动画。

它的长处是:
(1)根据JSON数据格局,完成轻量级和可弹性的动画,终究导出的Lottie动画资源是一个Json格局的文件,所以相对文件比较小
(2)支撑杂乱的矢量动画和交互元素
(3)兼容web、移动端等渠道

它的缺陷是:
(1)制造需求本钱,它不像gif相同制造简略,当然这不是咱们开发所关怀的事
(2)兼容性不算好,由于它是2017才呈现的,甚至比webp更晚

它的完成相同也很简略,首先依靠Lottie库

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

然后用com.airbnb.lottie.LottieAnimationView控件,最后调用playAnimation()就能播映动画,用起来也很简略,能够看官方demo
github.com/airbnb/lott…

总的来说,假如要完成比较杂乱的矢量动画,能够优先考虑它,并且它具有文件小,运用方便等特色

假如你对它研究得透彻,你甚至能够手动去改json来改变动画的作用。

4. MP4动画

别看mp4原则上是播映视频的,变通一下,它也能够是动画的播映器,你能够把动画的作用做成视频。

它的长处:
(1)由于是视频,它能做到质量很高,并且支撑音频
(2)能够做较长动画,由于是视频,所以长度能够设置较长
(3)兼容性比较高

它的缺陷:
(1)文件巨细较大,比其他动画格局大
(2)杂乱的动画不好做
(3)或许需求去处理一些播映器的问题

mp4的完成也比较简略,一般都会运用第三方的播映器去做,像exo、GSY这些。

总的来说,mp4动画的巨细比较大,一般考虑运用mp4动画的场景是动画的时间较长或者需求音效的大动画

5. PAG动画

PAG动画(也称为SWF动画)是指根据Adobe Flash技能创立的动画文件,通常以.swf文件扩展名保存。

它的长处:
(1)供给高级交互性和脚本功用,比方动画中能够和原生的控件进行交互
(2)支撑矢量图形,可完成可弹性动画
(3)可在动画中包括音频和视频元素

它的缺陷:
(1)播映需求Adobe Flash Player或相似插件,也便是播映需求特定的控件
(2)存在一些安全隐患,并且兼容性不算好

PAG动画的完成也由于需求特定的控件,所以需求依靠第三方库来完成。例如能够运用腾讯的libpag,可参考github.com/Tencent/lib…

总的来说,假如动画中需求与控件等做交互,能够考虑运用PAG动画,能够理解成一般的控件和动画放一起,都是用图层来处理,要么控件的图层在动画的图层上,要么在下面,而PAG是把控件嵌到动画里

6. 总结

上面列举了一些动画的完成方法,一般咱们对比这些方法都会依据像文件的巨细、运用是否方便这些维度去判别应该运用哪种方法去完成。可是这儿比较特殊,应该是要依据具体的场景去运用,意思是假如你的项目比较大,场景比较多,甚至或许会运用多个方法,而不是说只选其间一个最好的去用。

小动画主张运用webp去完成,一般的矢量动画主张运用原声的了解动画,杂乱的主张运用Lottie去完成,大动画假如还需求音效这些,主张运用mp4去完成,而假如动画和控件有交互的场景,比方我有个呼吸动画,我的控件也要跟着有呼吸的作用,这类动画运用PAG比较方便。