Android 布局动画之LayoutAnimation与LayoutTransition
2016-09-11 12:21
477 查看
概述
在Android的动画体系中,有补间动画,帧动画和属性动画,但是这些动画都是针对单个对象的,如果相对ViewGroup作动画,就要用到布局动画了.LayoutAnimation
LayoutAnimation 是API Level 1 就已经有的,LayoutAnimation是对于ViewGroup控件所有的child view的操作.下面是官方的一个示意图:也就是说它是用来控制ViewGroup中所有的child view 显示的动画。LayoutAnimation动画可以直接在xml中定义:
定义layoutAnimation
<!--anim/list_item_slide_layout_animation--> <?xml version="1.0" encoding="utf-8"?> <layoutAnimation xmlns:android="http://schemas.android.com/apk/res/android" android:animation="@anim/slide_in_from_left" android:animationOrder="random" android:delay="1"/> <!-- delay : ViewGroup 中单个Item动画的开始延时,取值是android:animation 所指定动画时长的倍数,可以是float,也可以是百分数,默认0.5 比如slide_in_from_left中定义的动画时长是500ms,这里delay=1,那么在上一个动画执行之后延时500ms执行下一个tem的动画 animationOrder : 动画开始顺序,normal(正序)、reverse(倒序)、random(随机) animation : 指定动画资源animation,注意不能使用animator -->
可以通过下面两种方式加载
一. 直接在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
LayoutTransition 是API Level 11 才出现的。LayoutTransition的动画效果,只有当ViewGroup中有View添加、删除、隐藏、显示的时候才会体现出来。LayoutTransition是一个布局改变动画
LayoutTransition也有两种方式添加
在xml中直接添加
// 使用系统默认的LayoutTransition动画 android:animateLayoutChanges="true"
在代码中使用(API 11 后)
// 使用系统默认的LayoutTransition动画 LayoutTransition mTransitioner = new LayoutTransition(); mTransitioner.setAnimator(LayoutTransition.DISAPPEARING, @animRes animtor);//设置动画 mViewGroup.setLayoutTransition(mTransitioner);
同时,可以给LayoutTransition设置监听器
mTransitioner.addTransitionListener(new LayoutTransition.TransitionListener(){//...}
自定义LayoutTransition三部曲
一. 定义LayoutTransition实例mTransitioner = new LayoutTransition();
二. 设置Animator
mTransitioner.setAnimator(LayoutTransition.DISAPPEARING, animOut);
三. 设置进ViewGroup
layoutTransitionGroup.setLayoutTransition(mTransitioner);
其中第二步中的第一个参数,有五种具体如下:
LayoutTransition.APPEARING:View添加时的动画。
LayoutTransition.CHANGE_APPEARING:View添加导致布局改变时整个布局容器的动画。
LayoutTransition.DISAPPEARING:View消失时的动画。
LayoutTransition.CHANGE_DISAPPEARING:View消失导致布局容改变时整个布局容器的动画。
LayoutTransition.CHANGE:不是由于View出现或消失造成改变的时候整个布局容器的动画。
相关源码地址:
AndroidAnimations
参考:Android LayoutAnimation 与 LayoutTransition
扩展阅读:在RecyclerView上使用布局动画(Layout animation)
Android LayoutAnimation使用及扩展
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories