[Android技术专题]动画知识概览

在Android应用开发中我们每天都在接触动画(Activity进入和退出、页面滑动、点击按钮等都有动画效果),但入门容易,真正做好很难。如果要把效果做得自然、看上去很爽需要你有一定的美感;如果要把效果做得足够流畅,你需要深入研究动画,弄懂其中的细节和原理。

一、在Android平台可以通过如下几种方式实现动画效果

1 补间动画

补间动画即开发者只需要指定开始、结束的关键帧,动画变化的“中间帧”则由系统根据补间动画加速器算法计算补齐。补间动画包括旋转(RotateAnimation)、透明(AlphaAnimation)、位移(TranslateAnimation)和缩放(ScaleAnimation)。补间动画的使用有如下几个特点:

  • 某个动画的实现既可以是一种动画效果,也可以是多种补间动画的组合(需要用到set标签或者AnimationSet类);

  • 补间动画的实现既可以在xml中定义,也可以通过代码实现;

  • 补间动画的变化规律可以通过插值器(补间动画加速器)Interpolator控制,系统定义了常见的插值器,如果不能满足你的要求,可以自定义插值器;

  • 补间动画的难点在于根据参考点对位置的关系换算,如果处理不好,可能要弄很久。

2 帧动画

帧动画是一帧一帧的显示动画效果。创建帧动画除了通过在xml中用animation-list作为根节点、item定义每一帧要显示的图片之外,也可以用Java代码的形式来创建帧动画。帧动画需要用到的核心类是AnimationDrawable。

帧动画的特点是:

  • 实现简单;

  • 效率低;

  • 视觉工作量大。

3 属性动画

属性动画是在Android 3.0开始引入的一种动画模式(如果想在Android 3.0之前的版本中使用属性动画,可以引用JakeWharton开源的NineOldAndroids),有了属性动画,可以考虑再也不使用补间动画和帧动画了,它功能强大、使用灵活,强烈建议在实际编码中使用属性动画。

关于属性动画的介绍网上已经有很多优秀的技术文章,比如郭霖的Android属性动画完全解析(上),初识属性动画的基本用法Android属性动画完全解析(中),ValueAnimator和ObjectAnimator的高级用法Android属性动画完全解析(下),Interpolator和ViewPropertyAnimator的用法,所以不再赘述。

4 GIF

GIF是一种图片格式,它分为静态GIF和动画GIF两种,扩展名为.gif,是一种压缩位图格式,支持透明背景图像,适用于多种操作系统,“体型”很小,网上很多小动画都是GIF格式。其实GIF是将多幅图像保存为一个图像文件,从而形成动画,最常见的就是通过一帧帧的动画串联起来的搞笑gif图,所以归根到底GIF仍然是图片文件格式。但GIF只能显示256色。

GIF有天然的劣势,图片质量很低,有很多应用的Splash界面会直接播放gif格式的文件,避免通过xml和代码实现起来过于复杂,github上优秀的GIF开源库有:GifViewandroid-gif-drawable

5 视频

有很多应用的引导界面是直接播放的视频,特别是一些大型的游戏,反编译它的代码可以看到,就是一个视频文件。视频文件在分辨率适配上会比较麻烦,制作成本也比较大。

6 SVG

SVG是可缩放矢量图形,他是基于可扩展标记语言,用于描述二维矢量图形的一种图形格式。它严格遵从XML语法,并用文本格式的描述性语言来描述图像内容,因此是一种和图像分辨率无关的矢量图形格式。SVG格式具备目前网络流行的jpg和png等格式无法具备的优势:可以任意放大图形显示,但绝不会以牺牲图像质量为代价;可在SVG图像中保留可编辑和可搜寻的状态;平均来讲,SVG文件比其它格式的图像文件要小很多,因而下载也很快。关于SVG更为详细的介绍可以参考这篇文章:Android实现炫酷SVG动画效果

7 其它

还可以通过自定义类,用定时器给ImageView更换背景图片的方式实现动画;如果使用到了游戏引擎,游戏引擎中对动画的渲染效率有增强,动画效果会很流畅。

二、使用动画过程中遇到过哪些坑

  • 在有动画效果的界面,强烈建议不要关掉硬件加速,在没有硬件加速的环境下运行动画效果会显得不流畅;

  • 动画(特别是循环播放的动画)效果功耗很大(因为CPU和GPU在高负荷持续工作呀),为了降低功耗,尽量控制动画的大小,以及动画出现的时机,最好是用户触发某个操作后执行动画效果,不要一进入界面就执行动画;

  • 谨慎使用AnimationDrawable,在4.2及之前的版本会很耗内存;并且AnimationDrawable中的每一帧图片在使用完后不能释放,否则在下次使用时会直接报异常;还有每一帧图片不宜过大,否则会卡成翔;

三、有哪些关于动画的优质开源项目

四、参考资料

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 170,565评论 25 707
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 11,612评论 4 59
  • 又是到了晚11点抢时间更文。 昨天首更便是如此。 狼狈不堪。 伏案7个小时不停歇地赶出公众号里一份几千字的超长攻略...
    Miss李ls阅读 147评论 5 2
  • 读了老舍的《母鸡》我也对母鸡充满了敬意。今天我也来写写我观察到的母鸡! 以前的以前,我也养过一群鸡。母鸡带着一群小...
    喜欢厨房的人阅读 460评论 0 3