Activity的切换需要在startActivity()或finish()函数之后紧跟函数(Fragment开头加getActivity(), 其他的将Context的对象强转为Activity):
overridePendingTransition(int enterAnim, int exitAnim);
getActivity().overridePendingTransition(int enterAnim, int exitAnim);
((Activity) context).overridePendingTransition(int enterAnim, int exitAnim);
其中,enterAnim和exitAnim是位于res/anim中的定义切换效果的文件,enterAnim定义了进入屏幕的Activity的动画效果,exitAnim定义了移出屏幕的动画效果。
Android的开发过程中,屏幕的坐标定义为:左上角为原点(0,0) ,水平向右为X正半轴,竖直向下为Y正半轴,而Activity的原点坐标(0,0)也是位于左上角;
当Activity从屏幕的右侧进入屏幕的过程,相当于Activity的X坐标由100%p到0的过程(见下图灰色示意部分,对应文件push_left_in.xml);
当Activity从屏幕的左侧进入屏幕的过程,相当于Activity的X坐标由-100%p到0的过程;(见下图粉色示意部分,对应文件push_right_in.xml);
当Activity从屏幕的右侧移出屏幕的过程,相当于Activity的X坐标由0到100%p的过程;(见下图红色示意部分,对应文件push_left_out.xml);
当Activity从屏幕的左侧移出屏幕的过程,相当于Activity的X坐标由0到-100%p的过程;(见下图绿色示意部分,对应文件push_right_out.xml);
push_left_in.xml
<?xml version="1.0"encoding="utf-8"?>
<setxmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="270"
android:fromXDelta="100%p"
android:interpolator="@android:anim/accelerate_interpolator"
android:toXDelta="0"/>
</set>
----------------------------------------------------------------------------------------------------------------------push_left_out.xml
<?xml version="1.0"encoding="utf-8"?>
<setxmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="270"
android:fromXDelta="0"
android:interpolator="@android:anim/accelerate_interpolator"
android:toXDelta="100%p"/>
</set>
----------------------------------------------------------------------------------------------------------------------
push_right_in.xml
<?xml version="1.0"encoding="utf-8"?>
<setxmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="270"
android:fromXDelta="-100%p"
android:interpolator="@android:anim/accelerate_interpolator"
android:toXDelta="0"/>
</set>
----------------------------------------------------------------------------------------------------------------------
push_right_out.xml
<?xml version="1.0"encoding="utf-8"?>
<setxmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="270"
android:fromXDelta="0"
android:interpolator="@android:anim/accelerate_interpolator"
android:toXDelta="-100%p"/>
</set>
当Activity从屏幕的上方进入屏幕的过程,相当于Activity的Y坐标由-100%p到0的过程(见下图绿色示意部分,对应文件push_top_in.xml);
当Activity从屏幕的下方进入屏幕的过程,相当于Activity的Y坐标由100%p到0的过程(见下图紫色示意部分,对应文件push_bottom_in.xml);
当Activity从屏幕的上方移出屏幕的过程,相当于Activity的Y坐标由0到-100%p的过程(见下图橙色示意部分,对应文件push_top_out.xml);
当Activity从屏幕的下方移出屏幕的过程,相当于Activity的Y坐标由0到100%p的过程(见下图灰色示意部分,对应文件push_bottom_out.xml);
push_top_in.xml
<?xml version="1.0"encoding="utf-8"?>
<setxmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="270"
android:fromYDelta="-100%p"
android:interpolator="@android:anim/accelerate_interpolator"
android:toYDelta="0"/>
</set>
----------------------------------------------------------------------------------------------------------------------push_top_out.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<translate
android:duration="270"
android:fromYDelta="0"
android:interpolator="@android:anim/accelerate_interpolator"
android:toYDelta="-100%p" />
</set>
----------------------------------------------------------------------------------------------------------------------
push_bottom_in.xml
<?xml version="1.0"encoding="utf-8"?>
<setxmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="270"
android:fromYDelta="100%p"
android:interpolator="@android:anim/accelerate_interpolator"
android:toYDelta="0"/>
</set>
----------------------------------------------------------------------------------------------------------------------
push_bottom_out.xml
<?xml version="1.0"encoding="utf-8"?>
<setxmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="270"
android:fromYDelta="0"
android:interpolator="@android:anim/accelerate_interpolator"
android:toYDelta="100%p"/>
</set>