原文链接 Android Animation Advanced Tricks
前面的文章介绍了动画的基本使用方法,本文来聊一聊涉及到动画的高级技巧,以及一些非常优质的学习资源和动画三方库和框架。
页面之间的过渡动画
常规的动画都是针对某一页面上的某个元素做动画,这个相对简单,之前的文章讲了很多。但有时候页面与页面之间也是需要过渡动画的,这个可以加强切换的视觉体验,但最好要注意整个应用内的风格统一,不能A到B是一种切换样式,B到C却是另外一种。
主要有两类,一是Activity之间的切换,二是布局之间的切换。
Activity之间的切换动画
因为Activity的创建与启动以及它的Window的创建和显示都是由Frameworks来控制的,甚至于Activity里面的布局何时加载也是由系统决定的,所以对于Activity之间的切换严重依赖于Frameworks,而不同版本的安卓,支持的情况还不一样。
传统的做法
这个是针对 于所有安卓 版本都可以使用的方法,也是最简单的方式,就是使用Activity#overridePendingTransition方法。
这个方法并不难,具体如何使用可以参考其文档,以及这篇文章,讲的都比较清楚。
使用Transition
在Android 4.4时,系统中加入了一个叫做Transition的东西,专门用于页面之间的切换的,但也仅是限于同一个窗口(也即同一个Activity内)的ViewGroup。在Android 5.0时又把Activity之间的切换提供了支持,对于5.0以上的版本可以使用这个框架来实现切换,会比传统的做法都要专业一些。
具体可以参看官方教程,以及这篇教程和这篇文章,讲解的都相当好。
布局之间的过渡切换
这里的布局就是指除Activity以外的,比如从一个ViewGroup切换到另外一个ViewGroup。其实Fragment本质上就是一个ViewGroup,所以也包含在内。
在Android 4.4 (Kikat API 19),加入了Transition frameworks,专门用于解决场景切换,主要是通过Scene对象和Transition对象。Transition对象定义具体针对 哪个ViewGroup做什么样的动画,而Scene对象定义了ViewGroup的某一种状态,如渐变进入,那么渐变前是一个Scene,完全可见后又是一个Scene,而渐变的过程则叫Transition。
可以参看官方文档,以详细了解如何使用transition。
复杂动画的实现逻辑
动画是一个非常复杂且精深的领域,千万不要说做个UI很容易,或者说写个动画很容易,要想做好动画需要很深的功底,不但需要对动画框架有深入的了解,也要对整个视觉GUI有深入的理解,并且需要良好的数学与物理知识。
复杂的动画的复杂度体现在两个方面,一个是整体上看起来复杂,也就是是很多不同的动画的组合;另外一个是具体的某个属性复杂,如复杂的路径,复杂的时间变化或者复杂的形变。分开说。
看起来复杂的动画
这一般是涉及众多的动画的组合,整体表现上看起来特别复杂。就比如说电商可能会有一个购物筐,里面往外飞各种商品的动画。对于这种就是要把它拆解,拆解开来后,其实并不复杂。
- 购物车:可以是渐变,不断的从透明变到不透明。或者干脆不做动画
- 商品:预定义一组商品,每次随机选择一个,再选择随机的位置,然后从底下往上飞(或者从上往下飞),再设置一个随机的速度,也可以加上旋转
这样拆解开来就不复杂了。
复杂的变幻
这里就要涉及一些数学 和物理知识了,比如用一些特别的曲线,特殊的曲面,特殊的形变等。
优秀的动画的设计范例
这里就不得不得提到大名顶顶的Dribbble了,这里有相当优秀的设计资源,其中也有很多动画设计,可以尝试着去实现一下,都很有挑战。
优秀的动画相关资源
还有一些资源,特别是开源的库,也非常值得学习和研究和使用。
MotionLayout
这个并不是三方的,而是官方AndroidX中的,相当的强大,当然使用起来也略复杂。具体使用方法可以参考 官方教程和这篇文章。
The Top 27 Android Animation Open Source Projects
这里是一个集合,里面列出一些优秀的动画相关的开源库,都相当的棒。
Android View Animations
有一些针对View的非常炫酷的特效,如抖动,缩放和旋转等。它是受一个水果上面的动画库的激发。
Material-Animations
主要是介绍如何使用Transition frameworks的。
Lottie
可以把设计软件Adobe After Effects直接转成动画。
一些插值器
专门用于加载动画
里面有各种神奇的加载特效,非常棒。是一个前端CSS加载特效的Android上的实现。
教程的示例
这是一个教程集锦,里面也包含各种示例,是一个相当不错的学习资源。
另外一个教程和示例
与上面的类似,也是一个集教程与实例在一起的项目。
Android Animation Detailed Tutorials
一个项目的合集。