(1)使用LayoutAnimation
所谓的布局动画,其实就是为ViewGroup添加显示动画效果,主要用过LayoutAnimationController来控制实现。LayoutAnimationController用于为一个Layout里面的控件,或者是一个ViewGroup里面的控件设置动画效果,可以在XML文件中设置,亦可以在Java代码中设置。
注意:布局动画是在android布局发生变化时添加动画效果,layout动画在每次布局发生变化的时候系统调用的一个预加载动画效果,使用layout动画可以让布局的变化过度看起来更自然
1. 通过创建xml文件,其中list_anim在res/anim/list_anim.xml:
1 <?xml version="1.0" encoding="utf-8"?> 2 <set xmlns:android="http://schemas.android.com/apk/res/android" 3 android:interpolator="@android:anim/accelerate_interpolator" 4 android:shareInterpolator="true" > 5 6 <alpha 7 android:duration="1000" 8 android:fromAlpha="0.0" 9 android:toAlpha="1.0" /> 10 11 </set>
2. 为ListView的layoutAnimation创建list_anim_layout.xml:
1 <?xml version="1.0" encoding="utf-8"?> 2 <layoutAnimation xmlns:android="http://schemas.android.com/apk/res/android" 3 android:delay="2" 4 android:animationOrder="normal" 5 android:animation="@anim/list_anim"/>
1 <ListView 2 ... 3 ...4 android:layoutAnimation="@anim/list_anim_layout"/>
1 // 在代码中实现列表动画 2 Animation animation = (Animation) AnimationUtils.loadAnimation( 3 mContext, R.anim.list_anim); 4 LayoutAnimationController lac = new LayoutAnimationController(animation); 5 lac.setDelay(0.4f); //设置动画间隔时间 6 lac.setOrder(LayoutAnimationController.ORDER_NORMAL); //设置列表的显示顺序 7 mListView.setLayoutAnimation(lac); //为ListView 添加动画
(2)通过 Adapter.getView() 方法
通过getView(int position, View convertView, ViewGroup parent) 返回的 view,进行对其动画操作就可。
e.g. :水平向上移动并翻转360度。
1 ObjectAnimator.ofFloat(convertView, "translationY", 400, 0).setDuration(1000).start(); 2 ObjectAnimator.ofFloat(convertView, "rotationX", 360, 0).setDuration(1000).start();
参考:Layout动画:在android布局发生变化时添加动画效果