这是一篇关于android基础的文章,最近做一个项目,在一个activity的标题左右分别有1个按钮,点击左边的按钮,新的activityA从左边进来,旧的activity从右边出去,返回时activityA从左边出去,原来activity从右边进入;点击右边的按钮,新的activityB从右边进来,从左边出去,返回时activityB从右边出去,原来activity从左边出来。
于是查看了一些博客的做法,大家都建议使用overridePendingTransition这个方法,看了一下api,发现很多博客上讲的有问题。
* @param enterAnim A resource ID of the animation resource to use for
* the incoming activity. Use 0 for no animation.
* @param exitAnim A resource ID of the animation resource to use for
* the outgoing activity. Use 0 for no animation.
public void overridePendingTransition(int enterAnim, int exitAnim) {
try {
ActivityManagerNative.getDefault().overridePendingTransition(
mToken, getPackageName(), enterAnim, exitAnim);
} catch (RemoteException e) {
}
}
第一个参数是,代表 即将进来的activity的动画
第二个参数是,当前activity出去的动画
于是我定义了4个动画
slide_in_for_left
<?xml version="1.0" encoding="utf-8"?>
<set
xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:interpolator="@android:anim/linear_interpolator"
android:duration="300"
android:fromXDelta="-100.0%p"
android:toXDelta="0.0" />
</set>
slide_in_form_out
<?xml version="1.0" encoding="utf-8"?>
<set
xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:interpolator="@android:anim/linear_interpolator"
android:duration="300"
android:fromXDelta="100.0%p"
android:toXDelta="0.0" />
</set>
slide_out_to_left
<?xml version="1.0" encoding="utf-8"?>
<set
xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:interpolator="@android:anim/linear_interpolator"
android:duration="300"
android:fromXDelta="0.0"
android:toXDelta="-100.0%p" />
</set>
slide_out_to_right
<?xml version="1.0" encoding="utf-8"?>
<set
xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:interpolator="@android:anim/linear_interpolator"
android:duration="300"
android:fromXDelta="0.0"
android:toXDelta="100.0%p" />
</set>
按照我的需求,我就在activity的startActivity的后面使用了
overridePendingTransition(R.anim.slide_in_from_left,R.anim.slide_out_to_right);
结果发现有新的activity进入的时候有黑屏,退出的时候还是按照系统默认规则退出的。
然后想到新的activityA也应该要使用overridePendingTransition方法设置动画。于是就在
activityA的finish时使用
finish();
overridePendingTransition(R.anim.slide_in_from_right,R.anim.slide_out_to_left);
好了,至此完美解决黑屏问题,和原本的需求,虽然是个小知识点,但发现很多博客上讲的有误,所以记录一下。后面我看了一些书籍,发现我理解的和他们一样。
下文摘自《android开发艺术探索》
overridePendingTransition方法必须在startActivity的后面或者finish()之后被调用才生效。