Android Activity和Fragment的转场动画

来源:互联网 发布:git ssh eclipse 端口 编辑:程序博客网 时间:2024/06/06 00:42

Activity转场动画可以通过overridePendingTransition(int enterAnim, int exitAnim)来实现。这个方法是API 5加入的,方法的第一个参数:enterAnim,是跳转Activity的进入动画的resource ID;第二个参数exitAnim,是当前Activity的离开动画的resource ID。

动画的资源文件放在res\anim\目录下,是View Animation。View Animation包含了基本的动画类型,基本可以满足一般转场动画的需要。

若不调用该方法,会使用系统默认的跳转动画,而不是不使用动画(参数传0,才表示不使用动画)。需要特别注意的是该方法的调用时机:必须在startActivity或finish、onBackpress之后调用才有效。

代码例子:

activity_right_in.xml

<set xmlns:android="http://schemas.android.com/apk/res/android">    <translate        android:duration="200"        android:fromXDelta="100%p"        android:toXDelta="0"/></set>

activity_right_out.xml

<set xmlns:android="http://schemas.android.com/apk/res/android">    <translate        android:duration="200"        android:fromXDelta="0"        android:toXDelta="-100%p"/></set>

activity_left_in.xml

<set xmlns:android="http://schemas.android.com/apk/res/android">    <translate        android:duration="200"        android:fromXDelta="-100%p"        android:toXDelta="0"/></set>

activity_left_out.xml

<set xmlns:android="http://schemas.android.com/apk/res/android">    <translate        android:duration="200"        android:fromXDelta="0"        android:toXDelta="100%p"/></set>

在MainActivity中跳转

Intent intent = new Intent(MainActivity.this,SecondActivity.class);startActivity(intent);// transaction animationoverridePendingTransition(R.anim.activity_right_in,R.anim.activity_right_out);

在SecondActivity中回到MainActivity

finish();// transaction animationoverridePendingTransition(R.anim.activity_left_in,R.anim.activity_left_out);

这样就实现了从右边进入,从左边退出的Activity转场动画。如果需要实现按返回键也有转场动画,需要重写Activity的onBackPress()方法。

@Overridepublic void onBackPressed() {super.onBackPressed();overridePendingTransition(R.anim.left_in,R.anim.left_out);}

Fragment转场动画可以通过transaction.setTransition和setCustomAnimations来实现。系统已经定义好的动画效果,比如
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE)是系统的淡入淡出动画,在add/hide/replace/remove之前调用即可。

FragmentTransaction transaction = manager.beginTransaction();                transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);fragment = MyFragment.newInstance();transaction.add(R.id.container, fragment, fragment.getId() + "");transaction.commit();

如果系统自带的动画效果满足不了你的需求,可以通过setCustomAnimations这个方法来实现。Activity的 overridePendingTransition一样,传入开启的Fragment进入动画resource ID和当前的Fragment关闭动画resource ID。

FragmentTransaction transaction = manager.beginTransaction();transaction.setCustomAnimations(R.anim.right_in, R.anim.right_out);fragment = MyFragment.newInstance();transaction.add(R.id.container, fragment, fragment.getId() + "");transaction.commit();
原创粉丝点击