Android动画机制提供了视图动画、属性动画和可绘制动画,这些动画都是针对单个View对象的,而布局动画(Layout Animation)作用的对象是ViewGroup,它可以在ViewGroup布局子View时,为子View添加相应的动画效果。
LayoutAnimation
LayoutAnimation在API Level 1就已经提供了,它对ViewGroup所有的子View都产生动画效果。LayoutAnimation有XML文件和Java代码两种使用方式。
XML文件
- 定义layoutAnimation
1 | <?xml version="1.0" encoding="utf-8"?> |
- 在ViewGroup中加载动画
1 | android:layoutAnimation="@anim/layout_animation" |
Java代码
1 | // 加载动画 |
注意
- 系统提供了gridLayoutAnimation用于给Gridview设置布局动画,对应的XML标签为 gridLayoutAnimation,对应的类为GridLayoutAnimationController;
- LayoutAnimation只在在创建ViewGroup的时候生效,后续添加的子View是没有动画效果的;
LayoutTransition
LayoutTransition是API Level 11才出现的,其动画效果只有当ViewGroup添加、删除、隐藏、显示子View的时候才会展示出来,所以,LayoutTransition是一个布局改变动画。LayoutTransition也有XML文件和Java代码两种使用方式。
XML文件
使用XML文件只能使用系统默认的LayoutTransition动画效果。
1 | <!-- 使用系统默认的LayoutTransition动画 --> |
Java代码
使用Java代码可以自定义LayoutTransition动画效果
1 | // 使用自定义LayoutTransition动画 |
设置自定义动画时,有以下几种方式:
- LayoutTransition.APPEARING:View添加时的动画。
- LayoutTransition.CHANGE_APPEARING:View添加导致布局改变时整个布局容器的动画。
- LayoutTransition.DISAPPEARING:View消失时的动画。
- LayoutTransition.CHANGE_DISAPPEARING:View消失导致布局容改变时整个布局容器的动画。
- LayoutTransition.CHANGE:不是由于View出现或消失造成改变的时候整个布局容器的动画。