第一种: (使用overridePendingTransition方法实现Activity跳转动画)
在Activity中代码如下
/** * 点击按钮实现跳转逻辑 */ button1.setOnClickListener(new View.OnClickListener() { @Override public 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"> <translate Android:duration="200" Android:fromXDelta="-100.0%p" Android:toXDelta="0.0" /> </set>
第二种: (使用style的方式定义Activity的切换动画)
从清单文件入手
<!-- 系统Application定义 --> <application Android: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() { @Override public void onClick(View v) { /** * 普通的Intent跳转Activity实现 */ Intent intent = new Intent(MainActivity.this, SecondActivity.class); startActivity(intent); } });
第三种: (使用ActivityOptions切换动画实现Activity跳转动画)
第一步
@Override protected 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() { @Override public 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() { @Override public 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中布局文件中定义共享组件
<Button Android: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" > <TextView Android: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() { @Override public 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 或者直接扫码