分享一下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();
}