翻看一款应用的时候看到数据内容飞入屏幕的效果比较炫,研究了一下实现,在此仅作记录供参考。
在Android的组件中,ListView和GridView都有一个属性android:layoutAnimation"
。它就是用来给每一个Item来统一设置动画的。
1 、 给这个属性赋值一个anim文件,名字为gridViewAnim。内容为下
<?xml version="1.0" encoding="utf-8"?>
<layoutAnimation xmlns:android="http://schemas.android.com/apk/res/android"
android:animation="@anim/anim_gridview_left_enter"
android:animationOrder="normal"
android:delay="0.5"
/>
delay:代表子类动画时间间隔,单位为秒
animationOrder:取值 normal,reverse(倒序),random(随机)。
2 、 动画文件anim_gridview_left_enter的内容:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<translate
android:duration="800"
android:fromXDelta="150%"
android:interpolator="@android:anim/accelerate_interpolator"
android:toXDelta="0%" />
<!--
<alpha
android:duration="1000"
android:fromAlpha="0"
android:toAlpha="1" />
-->
<!--
<rotate
android:duration="5000"
android:fromDegrees="0"
android:pivotX="50%"
android:pivotY="50%"
android:fillAfter="true"
android:toDegrees="180" />
-->
<!--
<scale
android:duration="500"
android:fromXScale="0.5"
android:toXScale="1"
android:pivotX="0%"
android:pivotY="50%"
android:fromYScale="0"
android:toYScale="1" />
-->
</set>
3 除了设置android:layoutAnimation属性外,还可通过代码动态添加
Animation animation = AnimationUtils.loadAnimation(this,
R.anim.list_anim);
// 得到一个LayoutAnimationController对象;
LayoutAnimationController lac = new LayoutAnimationController(animation);
// 设置控件显示的顺序;
lac.setOrder(LayoutAnimationController.ORDER_REVERSE);
// 设置控件显示间隔时间;
lac.setDelay(1);
// 为ListView设置LayoutAnimationController属性;
datalist.setLayoutAnimation(lac);
4 如果需要给每个Item添加效果不同,可以在Adapter的getView方法进行区分。以两栏的GridView左右动画不同为例。
Animation left = AnimationUtils.loadAnimation(context, R.anim.anim_gridview_left_enter);
Animation right = AnimationUtils.loadAnimation(context, R.anim.anim_gridview_right_enter);
if(arg0%2==0){
arg1.setAnimation(left);
}else{
arg1.setAnimation(right);
}
两个布局文件
<translate
android:duration="800"
android:fromXDelta="150%"
android:interpolator="@android:anim/accelerate_interpolator"
android:toXDelta="0%" />
<translate
android:duration="500"
android:fromXDelta="300%"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:toXDelta="0%" />