3.5.2 功能分析
动感影集的目的是使用动画技术呈现前后照片的动态切换效果,用到的动画必须承上启下,而且要求具备一定的视觉美感。根据本章介绍的动画特效,可用于动感影集动画的技术包括但不限于下列几种:
(1)淡入淡出动画:用于前后两张照片的渐变切换。
(2)灰度动画:用于从无到有渐变显示一张照片。
(3)平移动画:用于把上层照片抽离当前视图。
(4)缩放动画:用于逐步缩小并隐没上层照片。
(5)旋转动画:用于将上层照片甩离当前视图。
(6)裁剪动画:用于把上层照片由大到小逐步裁剪完。
(7)集合动画:用于把几种补间动画效果集中到一起播放。
(8)属性动画组合:用于把几种属性动画效果集中到一起播放。
(9)其余动画:更多动画特效切换,包括百叶窗动画、马赛克动画等。
除了以上列举的动画技术,还需考虑前后动画之间的无缝衔接,像补间动画可通过监听器AnimationListener侦听到播放完成事件,属性动画也可通过监听器AnimatorListener侦听到播放完成事件,它们都能在前一个动画播放结束后立即启动下一个动画。但是对于淡入淡出动画来说,它属于图形类型,并非动画类型,因此无法通过动画事件的侦听来判断是否已经播放完成,只能利用处理器固定延迟一段时间后开启下一个动画任务。动画技术用起来不难,关键要用好,只有用到位才能让我们的App熠熠生辉、锦上添花。
动感影集的实现过程主要包含下列三个步骤:
(1)编写动感影集刚开始的初始化代码
主要初始化各类动画用到的视图对象,同时清空界面布局并从第一个动画开始播放,初始化的示例代码如下:
(完整代码见animation\src\main\java\com\example\animation\YingjiActivity.java)
(2)编写各种动画效果之间的承上启下衔接代码
考虑到多数动画特效都能通过属性动画来实现,因而要重写动画监听器的onAnimationEnd方法,在属性动画结束时置换到下一种动画。这种操作适用于灰度动画、平移动画、缩放动画、旋转动画、裁剪动画、百叶窗动画、马赛克动画等,但不适用于淡入淡出动画。对于淡入淡出动画,只能固定延迟动画播放时长的若干秒,再触发下一种动画效果。
下面是处理各种动画上下衔接的示例代码:
(3)编写动感影集末尾的集合动画代码
影集末尾的集合动画融合了灰度动画、平移动画、缩放动画、旋转动画四种效果,分别构建四个动画对象,再把它们依次添加到集合动画即可。下面是构建集合动画的示例代码: