LayoutAnimationController
A layout animation controller is used to animated a layout's, or a view group's, children. Each child uses the same animation but for every one of them, the animation starts at a different time.
LayoutAnimationController用于为一个Layout里面的控件或者是Viewgroup的控件设置动画效果的,layout或者ViewGroup的子Veiw都使用同一个动画,但是每一个子Veiw的动画开始的时间是不一样的。同时我们也可以同过相关属性来设置子Veiw之间的这个时间间隔,以达到我们想要的效果。同时还可以,子view通话的播放顺序。我们通过他可以实现非常绚丽的效果.
实现方式
一、用代码实现
代码片段:
ListView lv = (ListView) rootView.findViewById(R.id.lv); /** * 首先创建一个动画 */ Animation animation = AnimationUtils.loadAnimation(getActivity(),R.anim.layout_item_animation); /** * 创建一个lyaoutd动画控制器,并将我们定义的animation 传入其构造函数,则此layout动画控制器实例就拿到了我们定义的动画。 */ LayoutAnimationController layoutAnimationController = new LayoutAnimationController(animation); /** *layout动画控制器的播放模式 * *normal 0 默认 *reverse 1 倒序 *random 2 随机 */ layoutAnimationController.setOrder(LayoutAnimationController.ORDER_RANDOM); /** * 设置子view之间动画的延迟时间,这个延迟时间为设置的这个值乘以动画的时常得到, * 比如:我们这里设置为0.3 ,假设动画设置的android:duration="500" * 则这个延迟时间为 0.3 *500 =150毫秒 */ layoutAnimationController.setDelay(0.3f); /** * 将我们设置好的布局控制器,然后再layout初始化的时候就会播放该动画 */ lv.setLayoutAnimation(layoutAnimationController);
一、用xml实现
1.在res/anim/下创建一个xxx.xml文件,我这里取名layout_test_animation.xml
<layoutAnimation />对应的是一个
<?xml version="1.0" encoding="utf-8"?> <layoutAnimation xmlns:android="http://schemas.android.com/apk/res/android" android:animation="@anim/layot_animation_set" android:animationOrder="reverse" android:delay="50%" > <!--android:delay 子view动画时间间隔 (延迟) 70% 也可以是一个浮点数 如“1.2”等 这个值乘以动画的播放时间就得到延迟的时间 android:animationOrder="random" 子view的显示方式 random表示随机 android:animationOrder 的取值有 normal 0 默认 reverse 1 倒序 random 2 随机 android:animation="@anim/layot_animation_set" 表示孩子显示时的具体动画是什么 android:repeatCount="infinite" 重复次数 --> </layoutAnimation>
接着定义我们的animation文件layot_animation_set.xml 如果是当个动画也可不用<set />标签,直接用当个动画的标签即可。
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" > <alpha android:duration="400" android:fromAlpha="0.2" android:toAlpha="1.0"> <!--fromAlpha属性为动画起始时透明度 toAlpha 属性为动画结束时透明度 0.0表示完全透明 1.0表示完全不透明 以上值取0.0-1.0之间的float数据类型的数字--> </alpha> <translate xmlns:android="http://schemas.android.com/apk/res/android" android:fromXDelta="0" android:fromYDelta="-100%p" android:toXDelta="0" android:duration="550" android:toYDelta="0"> <!--此处的单位可以是具体的设定为某个值(任意值都可以),也可以可以用百分比,用百分比时,不带p是对View自身的百分比, 带P是相对父类的百分比 可以为正数也可以为负数 ,此处组好使用百分比,因为百分比的值在不同的设备上基本一致--> </translate> <scale android:fromXScale="0.0" android:fromYScale="0.0" android:pivotX="50%" android:pivotY="50%" android:duration="400" android:toXScale="1.0" android:toYScale="1.1"> <!-- fromXScale[float] fromYScale[float] 为动画起始时,X、Y坐标上的伸缩尺寸 0.0表示收缩到没有 toXScale [float] toYScale[float] 为动画结束时,X、Y坐标上的伸缩尺寸 1.0表示正常无伸缩 值小于1.0表示收缩 值大于1.0表示放大 此处pivotX,pivotY的单位可以是具体的设定为某个值(任意值都可以,以为旋转的中心点可以是任意一点),也可以可以用百分比,用百分比时,不带p是对View自身的百分比, 带P是相对父类的百分比 可以为正数也可以为负数 ,此处组好使用百分比,因为百分比的值在不同的设备上基本一致--> </scale> </set>
接着在要使用动画的Layout或者VeiwGroup的xml文件中引用我们定义的<layoutAnimation /> 文件
<ListView android:id="@+id/lv" android:layout_width="wrap_content" android:layoutAnimation="@anim/layout_test_animation" android:background="#00ffffff" android:dividerHeight="1dp" android:divider="@null" android:layout_height="wrap_content" />
到此我们的Layout animation就设置完成了。
效果: