在Android的动画体系中,有补间动画,帧动画和属性动画,但是这些动画都是针对单个对象的,如果相对ViewGroup作动画,就要用到布局动画了.
LayoutAnimation 是API Level 1 就已经有的,LayoutAnimation是对于ViewGroup控件所有的child view的操作.下面是官方的一个示意图:
也就是说它是用来控制ViewGroup中所有的child view 显示的动画。LayoutAnimation动画可以直接在xml中定义:
"1.0" encoding="utf-8"?>
"http://schemas.android.com/apk/res/android"
android:animation="@anim/slide_in_from_left"
android:animationOrder="random"
android:delay="1"/>
可以通过下面两种方式加载
一. 直接在ViewGroup的 layout xml 文件中设置:
android:layoutAnimation="@anim/list_item_slide_layout_animation"
二. 使用代码设置
Animation animation = AnimationUtils.loadAnimation(mActivity,R.anim.slide_in_from_left);
LayoutAnimationController animationController = new LayoutAnimationController(animation,
1f);
animationController.setInterpolator(new AccelerateDecelerateInterpolator());
animationController.setOrder(LayoutAnimationController.ORDER_RANDOM);
mList.setLayoutAnimation(animationController);
mList.startLayoutAnimation();
同时,系统也提供了
gridLayoutAnimation
用于给Gridview设置布局动画,
对应的标签为gridLayoutAnimation,类为GridLayoutAnimationController
- 需要注意的是布局动画,在创建
ViewGroup
的时候生效,后续添加的子View
是没有动画效果的.- 在
API 1
的时候引进的,不用担心兼容性问题,正是如此,也只支持animation
,不支持Animator
LayoutTransition 是API Level 11 才出现的。LayoutTransition的动画效果,只有当ViewGroup中有View添加、删除、隐藏、显示的时候才会体现出来。
LayoutTransition是一个布局改变动画
LayoutTransition也有两种方式添加
// 使用系统默认的LayoutTransition动画
android:animateLayoutChanges="true"
// 使用系统默认的LayoutTransition动画
LayoutTransition mTransitioner = new LayoutTransition();
mTransitioner.setAnimator(LayoutTransition.DISAPPEARING, @animRes animtor);//设置动画
mViewGroup.setLayoutTransition(mTransitioner);
mTransitioner.addTransitionListener(new LayoutTransition.TransitionListener(){//...}
一. 定义LayoutTransition实例
mTransitioner = new LayoutTransition();
二. 设置Animator
mTransitioner.setAnimator(LayoutTransition.DISAPPEARING, animOut);
三. 设置进ViewGroup
layoutTransitionGroup.setLayoutTransition(mTransitioner);
其中第二步中的第一个参数,有五种具体如下:
相关源码地址:
AndroidAnimations
参考:Android LayoutAnimation 与 LayoutTransition
扩展阅读:在RecyclerView上使用布局动画(Layout animation)
Android LayoutAnimation使用及扩展