View动画会有一些特殊的场景使用。比如,ListeView可以控制子控件的出场效果,在Activity中可以实现不同的Activity之间切换效果。
一:LayoutAnimation
LayoutAnimation作用于ViewGroup,为ViewGroup制定一个动画,这样当它的子元素出场时都会具有这样动画效果。这种效果常常被用在ListView上,使用LayoutAnimation之后ListView它的每个item都会以一定的动画形式出现。添加的步骤如下:
1:在Listview 的控件中添加LayoutAnimation
<ListView
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layoutAnimation="@anim/anim_layout"
android:background="#fff4f7f9"
/>
2:定义LayoutAnimation
路径:res/anim/anim_layout.xml
<layoutAnimation
xmlns:android="http://schemas.android.com/apk/res/android"
android:delay="0.5"
android:animationOrder="normal"
android:animation="@anim/anim_item"
/>
android:delay 表示子元素开始动画的时间延时
android:animationOrder 表示子元素动画的顺序,有三种:nomal,reverse和random,其中nomal表示顺序显示,即排在前面的子元素先开始播放入场动画;reverse表示逆向显示,即排在后面的子元素先开始播放入场动画;random则是随机播放入场动画。
android:animation 为子元素制定具体的入场动画。
3:为子元素指定入场动画
/res/anim/anim_item.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="300"
android:interpolator="@android:anim/linear_interpolator"
android:shareInterpolator="true">
<alpha
android:fromAlpha="0.0"
android:toAlpha="1.0"
/>
<translate
android:fromXDelta="500"
android:toXDelta="0"
/>
</set>
**注意:除了在XML中指定LayoutAnimation外,还可以通过LayoutAnimationController来实现,具体代码如下:
ListView listview = (ListView) layout.findviewById(R.id.list);
Animation animation = AnimationUtils.loadAnimation(this,R.anim.anim_item);
LayoutAnimationController controller = new LayoutAnimationController(animation);
controller.setDelay(0.5f);
controller.setOrder(LayoutAnimationController.ORDER_NORMAL);
listView.setLayoutAnimation(controller);
二:Activity的切换效果
Activity有默认的切换效果,但是这个效果我们可以定义。主要用到overridePendingTransition(int enterAnim,int exitAnim);这个方法,这个方法必须在startActivity(intent)或者finish()之后被调用才能生效,它的参数含义:
enterAnim-----Activity 被打开 时,所需要的动画资源id
exitAnim-------Activity被暂停时,所需要的动画资源id
当启动一个Activity时,可以按照如下方式为其添加自定义切换效果。
Intent intent = new Intent(this,secondActivity.class);
startActivity(intent);
overridePendingTransition(R.anim.anim_item, R.anim.anim_item);
当Activity退出时,也可以为其指定自己的切换效果
@Override
public void finish(){
super.finish();
overridePendingTransition(R.anim.anim_item, R.anim.anim_item);
}
需要注意的是这个方法必须在startActivity(intent)或者finish()之后被调用才能生效。
Fragment也可以添加切换动画,由于Fragment是在API11中新引入的类,因此为了兼容性,我们需要使用suppert-v4这个兼容包,在这种情况下我们可以通过FragmentTransaction中的setCustomAnimations()方法来添加切换动画。这个切换动画需要是View动画!