关于overridePendingTransition的使用

这是一篇关于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()之后被调用才生效。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值