如何高效学习Android动画?

最近想学习Android动画,看了很多论坛大牛的帖子和Demo,但是始终无法形成一个全局概念,很多知识看了之后感觉只吸收到皮毛。现在让我自己写一个vi…
关注者
2,068
被浏览
108,804

20 个回答

曾经也同楼主一样,对Android中的动画不是很清楚,什么帧,Tween,属性等等,很多知识,也很琐碎,后来觉得动画这一块是很多开发人员绕不过的吧,虽然每次通过google或者百度就可以基本满足需求,但是总觉得太零散,太模糊。其实当时系统学习Android动画还有一部分原因:将来成为一个android组件开发工程师,如果想做出一些高性能,nice的动画就必须对动画的基础知识有深入的理解,因此就打算系统的学习一下。经过一段时间的专业学习,android动画的整体以及简单的动画实现都不是问题了,后来没有再深入,是因为自己的兴趣方向变了。现在简单分享一些自己的学习成果和心得吧。

自己整个学习过程中的产出的文章

lightskystreet.com/2014lightskystreet.com/2014
lightskystreet.com/2014
lightskystreet.com/2014
lightskystreet.com/2015

(由于

http://www.zhihu.com/people/033aaa7b41577bdf4f5344943a28dbb0

发起的

codekk.com/open-source-

下的开源项目原理分析项目

github.com/android-cn/a

二期中,很多分析项目涉及到了动画,所以该篇主要是对PropertyAnim详解和基础篇中的一些知识进行整理,作为二期的动画公共知识,

codekk.com/open-source-

绝对是超级棒的项目,大家可以多关注)

lightskystreet.com/2014

以及

lightskystreet.com/2015

这两篇文章,你可以对android动画总体有些了解,

lightskystreet.com/2014

这一篇则是专门介绍了3.0出现的属性动画,其中也涉及到了

github.com/JakeWharton

大神为3.0之前实现的兼容库github.com/JakeWharton/


通过ViewPager来实现动画效果的方式越来越多,一些视差效果也确实很赞,比如雅虎天气的视差效果,知乎导航界面中元素的视差,关于它们的实现原理,在

lightskystreet.com/2014

这篇中有详细的分析,其中也提到了GitHub上一些和ViewPager动画类似的实现,也分析了它们之间的区别,具体可以参考文章。

PropertyAnim 实际应用

主要介绍了一些简单API的使用,亮点是其中介绍了很多GitHub 上的动画项目,其中实现多数使用了

github.com/JakeWharton/

兼容库,可以作为不错的学习资料。

上面几篇文章中都有非常详细的介绍,就不多说了,因为文章中对于一些概念,使用,原理介绍的确实太详细了,现在想起来,当时钻的确实有点深了,比如

lightskystreet.com/2014

这篇文章,对属性动画中的ValueAnimatorEvaluatorsInterpolators的介绍以及TimeInterpolator和TypeEvaluator的比较等等,具体的可以参考文章。

这几篇文章看下来,你应该对android动画有一些更系统更深入的认识了。基本的动画实现应该没啥难度了。每篇文章的信息量很是很大的,因为在学习过程中主要是通过大量的GitHub动画项目,也参考了不少资料,在文章结尾处有提及。

如果你还想进阶,这里再分享一些不错的项目,这些项目都是在android动画基础上建立起来的,所以看他们的源码,完全没有难度:

首先推荐一个GitHub组织:

github.com/Yalantis

,该组织开源了很多特效的项目。很新颖,很有创意,绝对眼前一亮,可以作为不错的学习资料:

github.com/Yalantis/Gui

锉刀效果,不过我看跟拍电影时的打板有点像

github.com/Yalantis/Pho

很有创意的下拉动画,“升起的太阳”

github.com/Yalantis/Tau

也是下拉动画,“滑翔机”

github.com/Yalantis/Con

菜单动画,不过个人觉得貌似有点太炫技了

github.com/Yalantis/Sid

同样是菜单动画,不过加上了Reveal的转场效果

github.com/Yalantis/Fli

折叠动画

github.com/Yalantis/Euc

转场动画,感觉可以归为MaterialDesign设计风格

------------

Yalantis

end--------------

github.com/daimajia

github.com/daimajia/And

动画集合,

github.com/daimajia/And

ViewPager动画集合

github.com/daimajia/Ani

定义了很多Evaluator,你也可以寻找自己的函数来实现更赞的动画

------------daimajia end--------------

github.com/race604/FlyR

纸飞机,效果真是sweet,配上Blog,看看作者的思路和实现原理:

race604.com/flyrefresh/

关于我的几篇动画文章,如有不准确的地方,还望指正,希望对您和以后有兴趣学习动画的朋友有些帮助。

其它更多动画相关学习资料或者不错的开源库后面补充吧,还是那句话,原理都一样,脑洞不够大,去

dribbble.com/

找找灵感吧。

----------------------------------------------------------------------

分享一下最近star的几个不错的动画库

github.com/TakeoffAndrogithub.com/recruit-life
github.com/recruit-life
github.com/dodola/Metab
github.com/Q42/AndroidS

---------------------------------

来更新一下

因为前两天看到了Google工程师NickButcher放出了他们在droidconuk15上演讲的Buiding Meaningful Motion 的slides,看了之后特别激动。

slides共100多张,特别精细,内容质量也相当高,无论是Slide还是内容都非常棒。整个演讲以

iosched

googlesamples/android-topeka · GitHub

以及NickButcher自己的

plaid · GitHub

作为演示项目,通过各种motion的具体实现去展示如何构建有意义的动效。

从slides来看,这次演讲的内容主要介绍了一些Android 动画的一些基础知识,一些之前在上面的文章中写过的一些动画API:ViewPropertyAnimator,ObjectAnimator,Interpolator。另外还介绍了一些MaterialDesign风格的动画类和概念:Circular Reveals ,AnimatedVectorDrawable,Window content transition,Shared element transitions,这些在5.0之前都是没有的,5.0自带了transition,circualr reveals这样的API,使得动画的种类更多样,同时动画的性能方面也表现的更好,一些support lib的支持,也可以让你在老版本上实现一些5.0中的动画效果。具体的可以参考

googlesamples/android-topeka · GitHub

,google官方放出的Demo,刚放出来的时候只支持5.0,现在通过support lib兼容到了4.0了,可以作为不错的参考项目。

我觉得有必要强调一下”有意义“,有时候很多开发者有时候在炫技,动画很生硬,转场不自然。包括

Yalantis

开源的个别项目也是。NickButcher的这场演讲就来告诉你,如何构建有意义的动效,当然有些产品中的动效还和交互设计师的专业水平有关。所以可以仔细琢磨下slides和sample 项目中的动画实现,一些细节的把握。

这次演讲的视频还未放出,不过精美的slides已经是整个演讲的精髓了,强烈建议大家看看,对于动画学习很有帮助;

https://plus.google.com/+RomanNurik/posts/AwXCwixwnCb

(自备梯子)

自定义 View 和编写 Android Animation 还是不同的 Topic 的。

@徐廷霆

提到的是一些高阶动画,很赞的,可以花心思写一些玩玩儿。

可以给题主一些概述,具体的细节可以根据你的实际需求或者感兴趣的方面再慢慢展开,每个部分都能挖掘出很有趣的内容:

关于在实际工作中常用或者会接触到的 Android Animation 大概可以分成以下几种:

1. View Animation

这种属于最常使用的动画之一,例如 View Slide, Fade In/Out, Parallax Effect 等等

2. Activity Transition

常见于 Activity 进入或者跳出时的动画,比如启动一个 Activity, 从侧面滑入。在 Android 4.4 之后,引入了Scene, enterTransition 和 exitTransition 等概念,可以定义 Activity 进入以后不同View 做的一系列动画。在 Android 5.0 以后引入了 ShareElementsTransition, 让开发高质量的 Activity Transition 变的更加容易。

3. Drawable Animation

Drawable Animation 常见于启动或者一些加载过程中的帧动画。当然,Android 5.0 以后引入了 Vector Drawable, 一些很漂亮的 icon transition 就变的相对很容易实现一些,自然应用细节体验就能上很大一个台阶。

4. Property Animation

Property Animation 是 Android 3.0 以后引入的动画框架,一开始概念略微难理解,但是理解以后会发现非常好用,很多自定义动画或者复杂动画的场景变换可以借助这套框架来实现。

5. 其他

这些包括

@徐廷霆

提到的粒子,分形,烟雾,模糊等等,需要借助一些高阶技术,比如 RenderScript, OpenGLES, NDK 等等来做,假如不是特别需求,一般开发应用过程中还不会用到,做为兴趣爱好倒是挺好的一个切入点。

一些学习资料或者学习方法:

翻墙,翻墙,做为一个 Android 工程师,必须要学会翻墙!


首先是 Android 开发文档:

developer.android.com/ideveloper.android.com/i

Romain Guy 的 Blog

curious-creature.com/ca

Roman Nurik 的 G+

plus.google.com/+RomanN

Google Developer Live Videos

+

Chet Haase

's DevBytes:

Android 4.4 Transition:

youtube.com/watch?

Custom Activity Transition:

youtube.com/watch?

View Animations:

youtube.com/watch?

Window Animations:

youtube.com/watch?

针对 Android 5.0 的 Activity Transition:

+

Alex Lockwood

's Android Design Patterns blog:

androiddesignpatterns.com

Sample On Github:

github.com/alexjlockwoo

+

George Mount

's blog:

https://halfthought.wordpress.com

万能的 StackOverflow 和 github

剩下就是多做各种各样的练习,用 Kirill Grouchnikov 的话来讲

Step 1: make yourself familiar with the source code of the existing components [1]. That always helps.
Step 2: throw some code around and see how it looks like on the screen. At some point, after enough Mountain Dew has been consumed, it starts looking somewhat decent. Rinse and repeat.

引自:

plus.google.com/+Kirill

(PS. 这篇 Post 还很好的讲解了如何自定义 View ^_^ ).

以上只是一些概述,如果题主针对某些具体问题感兴趣,可以再修改问题或者提出来,如果能提供帮助的话,很乐意能够分享。