谈谈android的动画

android动画为app提供更丰富、更绚丽的视觉效果,因此app或多或少都会添加动画效果。在此总结一下,本人android开发过程中,有关动画的内容。

一、android动画种类和区别

android动画大类可以分为两类:位图动画和矢量图(SVG)动画。我们都知道,位图在放大后会变模糊,而矢量图则不会。因此位图通过动画变大后有可能会变模糊,而矢量图动画则不会。原则上矢量图动画可以实现所有需要的效果,但是矢量图实际上是类似程序员自己在画布上面画直线、正方形、圆等,可以很自由的定制画面的内容,简单的图形我们可以画出来,但是实际东西是很复杂的,就比如一个简单的人在走路,要用矢量图来画就很麻烦,效率也不高。实际开发中如果碰到比较复杂的动画效果,一般使用第三方库,后面会提到。

1. 位图动画

android系统为开发者提供了三种位图动画方式:补间动画、帧动画、属性动画。

这三种动画的主要区别是:帧动画首先导入若干张静态图片,然后我们通过依次显示这些图片,让人眼产生错觉,看起来画面好像动起来,跟以前的胶片电影类似。补间动画和属性动画开发者都只需指定动画开始以及动画结束这两个关键帧, 而动画变化的"中间帧"则由系统计算自动补齐,比如只要告诉系统视图View开始的位置以及结束的位置,系统会自动将视图从开始的位置移动到结束的位置。补间动画和属性动画的区别在于,补间动画只是展示视图的动画过程,并不会改变视图的实际属性值,而属性动画除了展示视图的动画过程外,视图的属性值也会随之改变,例如一个视图开始动画的位置是在(0,0)这个坐标,结束位置是在(50,100)这个坐标,如果是补间动画,那么结束后视图的实际位置还是在(0,0),而属性动画在动画结束后视图的位置则变化到(50,100)这个位置。

自从android3.0系统增加属性动画之后,在实际使用中属性动画应用最多,因为帧动画需要导入大量图片,加载和显示图片占用大量系统资源,不可能大量使用帧动画;而补间动画纯粹为了展示视图的动画而未改变视图的实际位置,在动画和手势交互较多的复杂情况下,可能出现一些显示问题。

2. 矢量图动画

在android 5.0系统后,新增VectorDrawable来支持矢量图(SVG),同时还引入AnimatedVectorDrawable来支持矢量图动画。

这些类的使用还是比较简单的(自己搜索),主要是对矢量图的理解。

二、实用的第三方动画库

简单的动画,使用android系统提供的属性动画就可以搞定。但是现实中有各种复杂的需求,为此大牛们开发了很多动画库,用来降低复杂动画的开发难度或加快开发速度。这里介绍两个比较有意思的开发库。

1. viewanimator

android本身提供了AnimatorSet这个类来支持几个连续或同时的动画,比如一个视图从(0,0)这个位置移动到(100,100),同时视图顺时针旋转90度。但是如果动画连续效果很多,代码量就会增加,显得代码很凌乱,代码不易读。viewanimator代码类似Rxjava的链式结构,动画过程一目了然,碰到页面里有多个视图需要动画并且有一系列连续动画时可以使用这个库。使用很简单只要在build.gradle里面导入:implementation 'com.github.florent37:viewanimator:1.0.5'(最后面的版本号有可能会更新)。

2. Lottie

你如果是程序员,我相信你一定会爱死这个库。这个库充分体现了一句话:每个人都做自己擅长的事。或许这是趋势吧,未来如果都往这个方向发展,程序员就可以将更多的精力关注在业务逻辑方面,而不是成天被UI这些东西搞得死去活来。按照传统的方法,一个动画效果,程序员从接到手到开发结束,往往都要被设计师扒一层皮,因为动画的过程需要程序员用代码来实现,动画效果往往很难一次性达到设计师的要求,所以调整、调整......永无止境的调整。有了Lottie这个库之后,动画效果是由设计师自己决定的,设计师使用AE等软件生成包含一套动画效果的.json文件,程序员只是将这个文件加载到app里面,用Lottie库提供的一个视图装一下,而且android和iOS可以共用一套动画效果(效果好不好,跟程序员一毛钱关系都没有,一定有程序员在偷笑)。至于这个库的使用方法网上很多,自己搜索一下。

想获取更多的android内容、教程或交流,可添加本人微信:1914532832,添加时请注明:android开发。

 

 

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页