Activity进入和退出动画

Activity进入和退出动画

Android系统5.0以下,activity进入动画是从中间向四周扩散,退出动画是从四周向中间聚拢,最后消失。有时候我们觉得这种效果不好,那么我们可以指定Activity的进入和退出动画

方式一

如果现在Activity1跳转到Activity2,在跳转的过程中我么可以指定Activity2的进入动画方式通过使用
overridePendingTransition(R.anim.activity_slide_enter_bottom, R.anim.activity_alpha_exit);
方法来实现,注意此方法写在StartActivity之后

  startActivity(new Intent(Activity1.this,Activity2.class));
    //参数一:Activity2进入动画  参数二:Activity1退出动画
    overridePendingTransition(R.anim.activity_slide_enter_bottom, R.anim.activity_alpha_exit);

当点击返回键的时候,Activity2销毁的时候,也可以以指定Activity2退出的动画,通过使用
overridePendingTransition(R.anim.activity_alpha_enter, R.anim.activity_slide_exit_bottom);方法来实现,注意此方法写在finish()之后

   @Override
    public void finish() {
        super.finish();
    //参数一:Activity1进入动画,参数二:Activity2退出动画
        overridePendingTransition(R.anim.activity_alpha_enter, R.anim.activity_slide_exit_bottom);
    }

接下来我们就来看看我们自定义的动画xml文件把

1.在res文件夹下新建一个anim文件夹
2.在anim文件夹下新建activity_slide_enter_bottom.xml,activity_alpha_exit.xml,activity_alpha_enter.xml,
  activity_slide_exit_bottom.xml四个文件

activity_slide_enter_bottom.xml代码如下

 <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android" >

    <translate
        android:duration="300"
        android:fromYDelta="100%"
        android:toYDelta="0" />

    <alpha
        android:duration="300"
        android:fromAlpha="0.0"
        android:toAlpha="1.0" />

    </set>

activity_slide_exit_bottom.xml代码如下

  <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android" >

    <translate
        android:duration="300"
        android:fromYDelta="0"
        android:toYDelta="100%" />

    <alpha
        android:duration="300"
        android:fromAlpha="1.0"
        android:toAlpha="0.0" />
    </set>

activity_alpha_exit.xml代码如下

<?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android" >

    <alpha
        android:duration="3000"
        android:fromAlpha="1.0"
        android:toAlpha="0" />

    </set>

activity_alpha_enter.xml代码如下

<?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android" >
    <alpha
        android:duration="300"
        android:fromAlpha="0.0"
        android:toAlpha="1.0" />
    </set>

方式二

1.在AndroidManifest.xml文件中设置Activity的样式

     <activity
            Android:name="com.zhiming.Activity2"
            android:theme="@style/ThemeActivity" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />


                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

2.在values文件夹下的themes.xml自定义Activity进入和退出动画主题、

<?xml version="1.0" encoding="utf-8"?>
    <resources>

        <style name="ThemeActivity" parent="android:Theme.Light.NoTitleBar">
            <item name="android:windowAnimationStyle">@style/AnimationActivity</item>
        </style>

    </resources>

3.在values文件夹下的styles.xml中自定义Activity进入和退出动画样式

<!-- Activity进出入动画 -->
    <style name="AnimationActivity" parent="@android:style/Animation.Activity">
        <item name="android:activityOpenEnterAnimation">@anim/activity_slide_enter_right</item>
        <item name="android:activityOpenExitAnimation">@anim/activity_slide_exit_left</item>
        <item name="android:activityCloseEnterAnimation">@anim/activity_slide_enter_left</item>
        <item name="android:activityCloseExitAnimation">@anim/activity_slide_exit_right</item>
    </style>
activityOpenEnterAnimation  Activity2进入动画
activityOpenExitAnimation   Activity1退出动画
activityCloseEnterAnimation Activity2销毁的时候,Activity1进入的动画   
activityCloseExitAnimation  Activity2退出动画

4.在res/anim 文件夹下新建activity_slide_enter_right.xml,activity_slide_exit_left.xml,activity_slide_enter_left.xml
activity_slide_exit_right.xml文件

activity_slide_enter_right.xml代码如下

<?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android" >

        <translate
            android:duration="300"
            android:fromXDelta="100%"
            android:toXDelta="0" >
        </translate>

        <alpha
            android:duration="300"
            android:fromAlpha="0.0"
            android:toAlpha="1.0" />

    </set>

activity_slide_exit_left.xml代码如下

<?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android" >

        <translate
            android:duration="300"
            android:fromXDelta="0"
            android:toXDelta="-100%" >
        </translate>

        <alpha
            android:duration="300"
            android:fromAlpha="1.0"
            android:toAlpha="0" />

    </set>

activity_slide_enter_left.xml代码如下

<?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android" >

        <translate
            android:duration="300"
            android:fromXDelta="-100%"
            android:toXDelta="0" >
        </translate>

        <alpha
            android:duration="300"
            android:fromAlpha="0"
            android:toAlpha="1" /> 

    </set>

activity_slide_exit_right.xml代码如下

<?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android" >

        <translate
            android:duration="300"
            android:fromXDelta="0"
            android:toXDelta="100%" >
        </translate>

        <alpha
            android:duration="300"
            android:fromAlpha="1.0"
            android:toAlpha="0" />

    </set>

总结:相比于这两种方式,我更加推荐使用第二种方式,比较简单方便

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Activity进入退出时的动画效果可以通过在res目录下的anim文件夹中定义xml文件来实现。其中,进入动画文件一般以slide_in_开头,退出动画文件一般以slide_out_开头。下面分别介绍一下两种动画的实现方式。 进入动画: 1. slide_in_left.xml:从左侧滑入 ``` <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:fromXDelta="-100%p" android:toXDelta="0" android:duration="300" /> </set> ``` 2. slide_in_right.xml:从右侧滑入 ``` <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:fromXDelta="100%p" android:toXDelta="0" android:duration="300" /> </set> ``` 3. slide_in_top.xml:从顶部滑入 ``` <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:fromYDelta="-100%p" android:toYDelta="0" android:duration="300" /> </set> ``` 4. slide_in_bottom.xml:从底部滑入 ``` <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:fromYDelta="100%p" android:toYDelta="0" android:duration="300" /> </set> ``` 退出动画: 1. slide_out_left.xml:从左侧滑出 ``` <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:fromXDelta="0" android:toXDelta="-100%p" android:duration="300" /> </set> ``` 2. slide_out_right.xml:从右侧滑出 ``` <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:fromXDelta="0" android:toXDelta="100%p" android:duration="300" /> </set> ``` 3. slide_out_top.xml:从顶部滑出 ``` <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:fromYDelta="0" android:toYDelta="-100%p" android:duration="300" /> </set> ``` 4. slide_out_bottom.xml:从底部滑出 ``` <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:fromYDelta="0" android:toYDelta="100%p" android:duration="300" /> </set> ``` 使用时,在Activity中的onCreate()方法中调用setContentView()方法之前,调用overridePendingTransition()方法,传入进入动画退出动画的资源id即可。例如,在进入Activity时使用从右侧滑入的动画退出时使用从左侧滑出的动画,代码如下: ``` startActivity(intent); overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_left); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值