Activity切换的几种动画效果设置

本文介绍了在Android应用中实现Activity切换动画的多种方法,包括使用overridePendingTransition()方法、指定Style、配置文件中的Theme以及使用ActivityOptions等。每种方法都详细说明了如何设置进出动画。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

分享一下Activity切换时实现动画效果的几种方式

     
   首先  切换Activity可以通过两种方式,

   1 调用 startActivity(),进入新的Activity 

   2 在当前的Activity 调用 finish() 结束当前的界面,回到上一个界面


 (一) 调用 overridePendingTransition()方法实现 Activity切换效果,

       先定义两个动画效果文件

  R.anim.in

<?xml version="1.0" encoding="utf-8"?>  
<set xmlns:android="http://schemas.android.com/apk/res/android" >  
    <translate  
        android:duration="1000"  
        android:fromXDelta="-100%p"  
        android:toXDelta="0%p" />  
</set> 

  R.anim.out

<?xml version="1.0" encoding="utf-8"?>  
    <set xmlns:android="http://schemas.android.com/apk/res/android" >  
        <translate  
            android:duration="1000"  
            android:fromXDelta="0%p"  
            android:toXDelta="100%p" />  
    </set> 

startActivity(之后调用

Intent intent = new Intent(MainActivity.this, MainActivity2.class);  
startActivity(intent);  
overridePendingTransition(R.anim.in, R.anim.out);

overridePendingTransition()方法的第一个参数:需要打开的Activity进入时的动画;第二个参数:需要关闭的Activity离开时的动画,MainActivity2将会执行R.anim.in动画,那么 MainActivity将会执行 R.anim.out动画


还有一种可以在finish()之后调用

   finish();  
    overridePendingTransition(R.anim.in, R.anim.out);  

效果一样

需要注意的是:  overridePendingTransition()方法只能在startActivity()或者finish()执行之后立即调用才会生效

                          overridePendingTransition()方法是可以在子线程运行的

(二) 通过指定Style,然后调用指定给当前的Activity

<style name="mystyle" parent="android:Animation">  
     <item name="@android:windowEnterAnimation">@anim/in</item>  
     <item name="@android:windowExitAnimation">@anim/out</item>  
</style>

在Activity中

getWindow().setWindowAnimations(R.style.mystyle); 

(三) Activity的配置文件中,在Theme里面指定该Style

        定义Application的Theme

<application
        Android:allowBackup="true"
        Android:icon="@mipmap/ic_launcher"
        Android:label="@string/app_name"
        Android:supportsRtl="true"
        Android:theme="@style/AppTheme">

     AppTheme样式具体定义出样式
    
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
        <item name="Android:windowAnimationStyle">@style/animStyle</item>
    </style>

           <style name="animStyle">
        <item name="Android:activityOpenEnterAnimation">@anim/in</item>
        <item name="Android:activityOpenExitAnimation">@anim/out</item>
    </style>

  设置好之后,当你启动新的Activity或者结束当前的Activity就会出现in/out动画效果了

   补充一点:Android:windowAnimationStyle 中有四种item的动画  

                   <item name="android:activityOpenEnterAnimation"></item>
                   <item name="android:activityOpenExitAnimation"></item>
                   <item name="android:activityCloseEnterAnimation"></item>
                   <item name="android:activityCloseExitAnimation"></item>


(四) 使用ActivityOptions实现Activity切换动画

        ActivityOptions是google在新的sdk中给我们提供了另外一种Activity的过度动画并且提供了兼容包ActivityOptionsCompat。

        android5.0才可以使用
 

  (1)在Activity中设置   

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
            getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
            Transition explode = null;
            //       其中有 explode ,fade ,no_transition
            //       slide_bottom ,slide_top ,slide_left ,slide_right 这些效果
            explode = TransitionInflater.from(this).inflateTransition(android.R.transition.explode);
            getWindow().setEnterTransition(explode);
            getWindow().setEnterTransition(explode);
            setContentView(R.layout.activity_main);
    }

  

 public void switchActivity(View view) {
        Intent intent = new Intent(this, Main1Activity.class);
        //  在startActivity执行跳转时调用startActivity的重载方法,
        // 执行ActivityOptions.makeSceneTransitionAnimation方法
        startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this).toBundle());
        finish();
    }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值