第一种: (使用overridePendingTransition方法实现Activity跳转动画)

在Activity中代码如下

/** * 点击按钮实现跳转逻辑 */button1.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {/** * 在调用了startActivity方法之后立即调用overridePendingTransition方法 */Intent intent = new Intent(MainActivity.this, SecondActivity.class);startActivity(intent);overridePendingTransition(R.anim.slide_in_left, R.anim.slide_in_left);}});

在anim文件下代码如下

<?xml version="1.0" encoding="utf-8"?><set xmlns:Android="http://schemas.Android.com/apk/res/Android"Android:shareInterpolator="false"Android:zAdjustment="top"><translateAndroid:duration="200"Android:fromXDelta="-100.0%p"Android:toXDelta="0.0" /></set>

第二种: (使用style的方式定义Activity的切换动画)

从清单文件入手

<!-- 系统Application定义 --><applicationAndroid:allowBackup="true"Android:icon="@mipmap/ic_launcher"Android:label="@string/app_name"Android:supportsRtl="true"Android:theme="@style/AppTheme">

进入AppTheme

<!-- Base application theme. --><style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"><!-- Customize your theme here. --><item name="colorPrimary">@color/colorPrimary</item><item name="colorPrimaryDark">@color/colorPrimaryDark</item><item name="colorAccent">@color/colorAccent</item><item name="Android:windowAnimationStyle">@style/activityAnim</item></style><!-- 使用style方式定义activity切换动画 --><style name="activityAnim"><item name="Android:activityOpenEnterAnimation">@anim/slide_in_top</item><item name="Android:activityOpenExitAnimation">@anim/slide_in_top</item></style>!

在windowAnimationStyle中存在四种动画

activityOpenEnterAnimation // 用于设置打开新的Activity并进入新的Activity展示的动画activityOpenExitAnimation // 用于设置打开新的Activity并销毁之前的Activity展示的动画activityCloseEnterAnimation // 用于设置关闭当前Activity进入上一个Activity展示的动画activityCloseExitAnimation // 用于设置关闭当前Activity时展示的动画

Activity中的测试代码如下

/** * 点击按钮,实现Activity的跳转操作 * 通过定义style的方式实现activity的跳转动画 */button2.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {/** * 普通的Intent跳转Activity实现 */Intent intent = new Intent(MainActivity.this, SecondActivity.class);startActivity(intent);}});

第三种: (使用ActivityOptions切换动画实现Activity跳转动画)

第一步

@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// 设置contentFeature,可使用切换动画getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);Transition explode = TransitionInflater.from(this).inflateTransition(Android.R.transition.explode);getWindow().setEnterTransition(explode);setContentView(R.layout.activity_main);}

第二步

/** * 点击按钮,实现Activity的跳转操作 * 通过Android5.0及以上代码的方式实现activity的跳转动画 */button3.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent(MainActivity.this, ThreeActivity.class);startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(MainActivity.this).toBundle());}});

第四种: (使用ActivityOptions之后内置的动画效果通过style的方式)

先在Application项目res目录下新建一个transition目录,然后创建资源文件activity_explode,编写如下代码

<explode xmlns:Android="http://schemas.Android.com/apk/res/Android"Android:duration="300" />

定义style文件

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <!-- Customize your theme here. --> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> <item name="Android:windowEnterTransition">@transition/activity_explode</item> <item name="Android:windowExitTransition">@transition/activity_explode</item></style>

执行跳转逻辑

/** * 点击按钮,实现Activity的跳转操作 * 通过Android5.0及以上style的方式实现activity的跳转动画 */button4.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {/** * 调用ActivityOptions.makeSceneTransitionAnimation实现过度动画 */Intent intent = new Intent(MainActivity.this, FourActivity.class);startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(MainActivity.this).toBundle());}});

第五种: (使用ActivityOptions动画共享组件的方式实现跳转Activity动画)

在Acitivity_A中布局文件中定义共享组件

<ButtonAndroid:id="@+id/button5"Android:layout_width="match_parent"Android:layout_height="wrap_content"Android:layout_below="@+id/button4"Android:layout_marginTop="10dp"Android:layout_marginRight="10dp"Android:layout_marginLeft="10dp"Android:text="组件过度动画"Android:background="@color/colorPrimary"Android:transitionName="shareNames"/>

在Acitivity_B中布局文件中关联共享组件

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"Android:id="@+id/activity_second"Android:layout_width="match_parent"Android:layout_height="match_parent"Android:gravity="center_horizontal"Android:orientation="vertical"Android:transitionName="shareNames"><TextViewAndroid:layout_width="match_parent"Android:layout_height="match_parent"Android:background="@color/colorAccent"Android:layout_marginTop="10dp"Android:layout_marginBottom="10dp"/>

执行跳转逻辑

/** * 点击按钮,实现Activity的跳转操作 * 通过Android5.0及以上共享组件的方式实现activity的跳转动画 */button5.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent(MainActivity.this, FiveActivity.class);startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(MainActivity.this, button5, "shareNames").toBundle());}});

总结:

  • overridePendingTransition方法从Android2.0开始,基本上能够覆盖我们activity跳转动画的需求;
  • ActivityOptions API是在Android5.0开始的,可以实现一些炫酷的动画效果,更加符合MD风格;
  • ActivityOptions还可以实现两个Activity组件之间的过度动画; *

关于我

微信公众号:infree6 或者直接扫码

实现activity跳转动画的五种方式插图