从FirstActivity进入到SecondActivity,再点击返回键从SecondActivity进入到FirstActivity这样一个过程中如何设置两个Activity创建和销毁的动画呢?
第一步:在FirstActivity
设置Intent进入SecondActivity的代码:
Intent intent = new Intent(this, SecondActivity.class);
startActivity(intent);
// 参数1:SecondActivity进场动画,参数2:FirstActivity出场动画
overridePendingTransition(R.anim.push_right_in,
0
);
这时候FirstActivity出场没有动画,SecondActivity进场动画是push_right_in
;
第二步:SecondActivity退出时 finish();
// 参数1:FirstActivity进场动画,参数2:SecondActivity出场动画
overridePendingTransition(0, R.anim.left_out);
这时候FirstActivity进场没有动画,SecondActivity出场动画是push_left_out;
第三步:两个Activity设置Theme,style中要添加如下配置
<!-- 第二个页面进入时第一个页面不会出现黑屏 -->
<item name="android:windowIsTranslucent">true</item>
下面是 Android 应用的整体的进出场动画处理()alpha)
push_right_in.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="500"
android:fromXDelta="100%"
android:toXDelta="0%" />
<alpha
android:duration="500"
android:fromAlpha="0.0"
android:toAlpha="1.0" />
</set>
push_right_out.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="500"
android:fromXDelta="0%"
android:toXDelta="100%" />
<alpha
android:duration="500"
android:fromAlpha="1.0"
android:toAlpha="0.0" />
</set>
push_left_in.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="500"
android:fromXDelta="-100%"
android:toXDelta="0%" />
<alpha
android:duration="500"
android:fromAlpha="0.0"
android:toAlpha="1.0" />
</set>
push_left_out.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="500"
android:fromXDelta="0%"
android:toXDelta="-100%" />
<alpha
android:duration="500"
android:fromAlpha="1.0"
android:toAlpha="0.0" />
</set>
styles.xml(这里是关键,注意;下面的样式,四个anim都不一样!!!)
[html] view plain copy
- <!-- animation 样式 -->
- <style name="activityAnimation" parent="@android:style/Animation">
- <item name="android:activityOpenEnterAnimation">@anim/push_right_in</item>
- <item name="android:activityOpenExitAnimation">@anim/push_left_out</item>
- <item name="android:activityCloseEnterAnimation">@anim/push_left_in</item>
- <item name="android:activityCloseExitAnimation">@anim/push_right_out</item>
- </style>
主题:
[html] view plain copy
- <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
- <item name="android:windowNoTitle">true</item>
- <item name="android:textColorSecondary">@color/common_text</item>
- <item name="android:windowAnimationStyle">@style/activityAnimation</item>
- <item name="android:windowBackground">@color/select_btn_color</item>
- </style>
清单文件中,实现该主题即可:
[html] view plain copy
- <application
- android:name=".app.BaseApplication"
- android:icon="@drawable/ic_launcher"
- android:label="@string/app_name"
- android:persistent="true"
- android:supportsRtl="true"
- android:theme="@style/AppTheme">
需要的朋友可以试一下,很好用,必须实现这四个anim 不然效果看上去很low,市面上很多人就只写了两个anim 误导大家,而且效果不好看!
Interpolator的具体使用方法
Interpolator定义了动画变化的速率,在Animations框架当中定义了一下几种Interpolator
1.AccelerateDecelerateInterpolator:在动画开始与结束的地方速率改变比较慢,在中间的时候速率快。
2.AccelerateInterpolator:在动画开始的地方速率改变比较慢,然后开始加速
3.CycleInterpolator:动画循环播放特定的次数,速率改变沿着正弦曲线
4.DecelerateInterpolator:在动画开始的地方速率改变比较慢,然后开始减速
5.LinearInterpolator:动画以均匀的速率改变
备注:
1、在set标签中:
-
<set xmlns:android="http://schemas.android.com/apk/res/android"
-
android:interpolator="@android:anim/accelerate_interpolator"/>
2、如果在一个set标签中包含多个动画效果,如果想让这些动画效果共享一个Interpolator。
android:shareInterpolator="true"
3、如果不想共享一个interpolator,则设置android:shareInterpolator="false",并且需要在每一个动画效果处添加interpolator。
-
<alpha
-
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
-
android:fromAlpha="1.0"
-
android:toAlpha="0.0"
-
android:startOffset="500"
-
android:duration="500"/>
interpolator的参考:https://blog.csdn.net/lyx4228716/article/details/50971996