LayoutAnimation/LayoutTransition源码分析

LayoutAnimation

    Android的动画类型比较多,LayoutAnimation便是其中一种,关于LayoutAnimation的使用可参考《 Android LayoutAnimation使用及扩展》,其实就是给目标ViewGroup控件添加LayoutAnimation,之后该ViewGroup展示时每个子View便会依次做动画。本质就是第一次绘制前给每个子View设置一个Animation,每个View的Animation都设置一个不同时长的startOffset time,即播放起始时间岔开,这样便能达到依次播放的效果。源码解析如下所示,感兴趣的可根据时序图自行研究。

LayoutAnimation/LayoutTransition源码分析_第1张图片

LayoutTransition

    上面情形是ViewGroup显示时,其子View依次播动画,那有没有往ViewGroup中添加、删除、显示、隐藏子View也能有一个过度效果?这个也是有的,有一个称为LayoutTransition的东西就是干这个事情的,如何使用可参考《 Android属性动画Property Animation系列三之LayoutTransition》及官方文档《 LayoutTransition》。

    LayoutTransition顾名思义就是在layout change时做的一个过渡动画。我们把导致ViewGroup layout发生改变的子View称为newView,比如ViewGroup添加一个新的子View,那这个新子View即为newView。LayoutTransition的原理就是为其他子View(非newView)、ViewGroup的父View设置一个change动画,同时newView设置一个appearing或disapearing动画。注意ViewGroup的父View做动画开关默认是打开的,如需关闭调用LayoutTransition.setAnimateParentHierarchy(false)即可。下面是addView时触发的时序图,感兴趣的可根据调用关系自行理解。layoutTransition提供了setAnimator(int transitionType, Animator animator)接口来设置自定义动画,否则使用默认动画。

LayoutAnimation/LayoutTransition源码分析_第2张图片

参考文档:
https://developer.android.com/training/animation/layout.html#activity
https://developer.android.com/reference/android/animation/LayoutTransition.html
https://developer.android.com/reference/android/view/animation/LayoutAnimationController.html

你可能感兴趣的:(Android应用层,android,Framework层)