1、首先先写两个动画,分别时进入和退出的动画。在res/anim下创建两个文件
进入动画entry.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:fillAfter="true">
<translate
android:fromYDelta="100%p"
android:toYDelta="0"
android:duration="300"
/>
</set>
退出动画exit.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:fillAfter="true">
<translate
android:fromYDelta="0"
android:toYDelta="100%p"
android:duration="300"
/>
</set>
扩展:
在这些属性里面还可以加上%和p,例如:
Android:toXDelta=”100%”,表示自身的100%,也就是从View自己的位置开始。
android:toXDelta=”80%p”,表示父层View的80%,是以它父层View为参照的。
2、页面跳转和退出逻辑
注意:
overridePendingTransition(R.anim.entry,0);这个方法一定要在startActivity之后去调用,否则没作用
//页面的跳转
Intent intent = new Intent(MainActivity.this,Test1Activity.class);
startActivity(intent);
overridePendingTransition(R.anim.entry,0);
注意:
overridePendingTransition方法依然要在finish方法之后调用
public class Test1Activity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test1);
}
//重写finish方法
@Override
public void finish() {
super.finish();
overridePendingTransition(0,R.anim.exit);
}
}
进行到这里基本效果已经出来了,但是怎么看着怪怪的呢,当Activity要出来时之前的那个Activity看着都是黑的,还有那个ActionBar、状态栏都存在。
3、写一个style来处理这些吧
<style name="ActivityEntryAnimation" parent="Theme.AppCompat.Light.NoActionBar">
<!-- 去除Activity顶部黑线 -->
<item name="android:windowContentOverlay">@null</item>
<!-- 系统状态栏背景设置透明 -->
<item name="android:windowDrawsSystemBarBackgrounds" tools:targetApi="lollipop">@android:color/transparent</item>
<!-- Activity背景 -->
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
<!-- 背景模糊 -->
<!--<item name="android:backgroundDimEnabled">true</item>-->
</style>
然后就完美了