在Android 2.0之后有了overridePendingTransition(),其中里面两个参数,一个是前一个activity的退出两一个activity的进入。
以下是自定义动画的效果图:
Activity中核心实现代码:
public void initView() {
mTurnBtn = (Button) findViewById(R.id.turn_btn);
mTurnBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this, Main2Activity.class);
startActivity(intent);
//淡入淡出效果
// overridePendingTransition(android.R.anim.fade_in,android.R.anim.fade_out);
//滑动效果
// overridePendingTransition(android.R.anim.slide_in_left,android.R.anim.slide_out_right);
//自定义效果
//overridePendingTransition(R.anim.zoomin, R.anim.zoomout);
}
});
}
实现淡入淡出的效果
overridePendingTransition(android.R.anim.fade_in,android.R.anim.fade_out);
由左向右滑入的效果
overridePendingTransition(Android.R.anim.slide_in_left,android.R.anim.slide_out_right);
实现自定义效果,即类似iphone的进入和退出时的效果
overridePendingTransition(R.anim.zoomin, R.anim.zoomout);
新建zoomin.xml文件
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:Android="http://schemas.android.com/apk/res/android"
Android:interpolator="@android:anim/decelerate_interpolator">
<scale Android:fromXScale="2.0" android:toXScale="1.0"
Android:fromYScale="2.0" android:toYScale="1.0"
Android:pivotX="50%p" android:pivotY="50%p"
Android:duration="@android:integer/config_mediumAnimTime" />
</set>
新建zoomout.xml文件
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:Android="http://schemas.android.com/apk/res/android"
Android:interpolator="@android:anim/decelerate_interpolator"
Android:zAdjustment="top">
<scale Android:fromXScale="1.0" android:toXScale=".5"
Android:fromYScale="1.0" android:toYScale=".5"
Android:pivotX="50%p" android:pivotY="50%p"
Android:duration="@android:integer/config_mediumAnimTime" />
<alpha Android:fromAlpha="1.0" android:toAlpha="0"
Android:duration="@android:integer/config_mediumAnimTime"/>
</set>
重点的就是制作合适的Animation.
优化
这样的做法,需要在每次Activity启动或销毁时调用 overridePendingTransition(),代码量太大。
系统提供属性设置动画效果,使用自定义主题应用于整个项目..
具体代码如下:
打开res/values/styles.xml文件,增加如下代码:
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light" >
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<!--设置windowAnimationStyle属性-->
<item name="android:windowAnimationStyle">@style/MyAnimation</item>
</style>
<style name="MyAnimation">
<!--新启动Acticity进入-->
<item name="android:activityOpenEnterAnimation">@anim/zoomin</item>
<!--原Activity退出-->
<item name="android:activityOpenExitAnimation">@anim/zoomout</item>
<!--原Activity返回-->
<item name="android:activityCloseEnterAnimation">@anim/zoomin</item>
<!--Activity销毁-->
<item name="android:activityCloseExitAnimation">@anim/zoomout</item>
</style>
</resources>
打开AndroidManifest.xml清单文件,配置主题