利用位移动画,实现activity跳转时,新的activity从右边进入,activity退出时从右边消失,类似微信打开消息的功能
1 overridePendingTransition
这个是谷歌官方提供的负责activity跳转动画的方法,里面传入两个参数
第一个是本次跳转时,要进入的activity需要执行的动画
第二个是本次跳转时,要退出的activity需要执行的动画
这两个动画直接作用在对应的activity上
2 具体实现
2.1 准备什么样的动画
需要准备四个动画,四个动画分为两组。
第一组用于开启新的activity
第二组用于退出现在的activity
为什么要分为两组:因为这两个过程,都有原活动的退出和新活动的进入。而这两组动画执行的方向不一样。
例如:
开启新的活动时:
新的activity需要执行进入动画,是从屏幕右边到屏幕中央,即从1位置到主界面
当前的activity是需要执行退出动画,是从屏幕中央到外面,即从主界面到2位置
退出当前活动时
当前的活动要执行退出动画,即从主界面到1位置
而需要出现在屏幕上的活动,即当前活动覆盖的那个活动,需要执行进入动画,从2位置到主界面。
可以看出,这两个过程进入和退出的动画正好是相反的,所以需要两组四个动画
2.2 开始准备动画
把打开新activity时,进入的动画命名为left_in,退出的动画命名为left_out
退出当前activity时,进入的动画命名为right_in,退出的动画命名为right_out.
left_in
<?xml version="1.0" encoding="utf-8"?>
<!--
这个动画作用在打开活动时需要进入的activity上
所以对它执行位移动画,
所有activity默认都是在屏幕中的,所以坐标原点就是屏幕左上角
即(0,0)位置对应屏幕左上角
让他的左上角坐标从相对于父元素100%的位置,即1位置
移动到0位置,即主界面
-->
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="200"
android:fromXDelta="100%p"
android:toXDelta="0"
android:fromYDelta="0"
android:toYDelta="0"/>
left_out
<?xml version="1.0" encoding="utf-8"?>
<!--
这个动画作用在打开活动时需要进入的activity上
所以对它执行位移动画,
所有activity默认都是在屏幕中的,所以坐标原点就是屏幕左上角
即(0,0)位置对应屏幕左上角
让他的左上角坐标从0位置,即主界面,移动到相对于父元素100%的位置,即1位置
-->
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="200"
android:fromXDelta="0"
android:toXDelta="-100%p"
android:fromYDelta="0"
android:toYDelta="0">
</translate>
right_in
<?xml version="1.0" encoding="utf-8"?>
<!--
这个动画作用在打开活动时需要进入的activity上
所以对它执行位移动画,
所有activity默认都是在屏幕中的,所以坐标原点就是屏幕左上角
即(0,0)位置对应屏幕左上角
让他的左上角坐标从0位置,即主界面,移动到相对于父元素-100%的位置,即2位置
-->
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="200"
android:fromXDelta="-100%p"
android:toXDelta="0"
android:fromYDelta="0"
android:toYDelta="0">
</translate>
right_out
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="200"
android:fromXDelta="0"
android:toXDelta="100%p"
android:fromYDelta="0"
android:toYDelta="0">
</translate>
2.3 执行动画
利用overridePendingTransition执行动画
这个方法必须用在startActivity或者finish后面
在开启新的活动时
Intent intent1=new Intent(this,Main2Activity.class);
startActivity(intent1);
overridePendingTransition(R.anim.left_in,R.anim.left_out);
在推出当前活动时
可以设置某个按钮或者后退按钮按下时,执行finish然后执行overridePendingTransition
public void onBackPressed() {
finish();
overridePendingTransition(R.anim.right_in,R.anim.right_out);
}