layoutAnimation是为viewgroup的子项统一设置进入动画的一种动画,原理也很好理解,就是在绘制子项前根据参数计算出每一项的动画的startOffset,也就是启动等待时间,然后依次为子项设置动画即可。
和其他动画一样,有xml静态和代码两种设置方式:
1.xml:
<android.support.v7.widget.RecyclerView
android:id="@+id/rv"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layoutAnimation="@anim/list_anim">
</android.support.v7.widget.RecyclerView>
直接设置相应viewgroup的layoutAnimation属性为anim文件夹下的这个动画文件。
list_anim:
<?xml version="1.0" encoding="utf-8"?>
<layoutAnimation xmlns:android="http://schemas.android.com/apk/res/android"
android:delay="1"
android:animationOrder="normal"
android:animation="@anim/item_anim"/>
三个属性也比较好理解,animationOrder确定子项的出场顺序,包括正序,倒序和随机。animation就是子项出场动画了,就是普通的视图动画。
delay指的是两个动画间的间隔,这个值的最终确定是 delay*(item_anim里的duration)。
2.代码设置(这里用的是kotlin)
val anim= AnimationUtils.loadAnimation(this,R.anim.item_anim);
val controll=LayoutAnimationController(anim)
controll.order=LayoutAnimationController.ORDER_NORMAL
controll.delay=1.0f
rv.layoutAnimation=controll
rv.adapter=MyAdapter(list)
可以看到,LayoutAnimationController类就是xml中的LayoutAnimation,思路和xml一样。
需要注意的是,这样设置的动画只有在viewgroup初始化的时候才有效,如果在onCreate后添加数据或者为列表设置适配器都是无效的,如果想要设置子项添加和删除时的动画,可以参考:http://blog.csdn.net/harvic880925/article/details/50985596