Android Activity和Fragment的转场动画

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 animation
overridePendingTransition(R.anim.activity_right_in,R.anim.activity_right_out);

在SecondActivity中回到MainActivity

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

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

@Override
public 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();
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值