【问题标题】:How to finish an activity when transition is done Android转换完成后如何完成活动Android
【发布时间】:2016-10-29 09:35:57
【问题描述】:

我想在两个活动之间的转换完成后结束上一个活动

我尝试过ActivityCompat.finishAfterTransition(this);,但它实际上在过渡完成之前完成了活动

我之前研究过this solution,但我无法理解它的答案,如果有人能解释如何在过渡完成后结束活动,那就太好了

更新:

我刚刚尝试像这样开始下一个活动

Intent intent = new Intent(LoginActivity.this, TaskActivity.class);
                    startActivity(intent);

onStop 代码将被激活,但是当我使用它时

ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(LoginActivity.this);
                Intent intent = new Intent(LoginActivity.this, TaskActivity.class);
                startActivity(intent,options.toBundle());

onStop 不会被激活,所以我应该手动激活它,如果是的话,推荐

【问题讨论】:

  • 使用finish() ?
  • 我会,但它会闪烁,如果我在下一个活动中完成活动,它将显示完成动画
  • 您在寻找overridePendingTransition吗?据我了解您的问题,这几乎就是您想要实现的目标
  • @Droidman 不,我目前正在做的根本不是登录屏幕,然后当登录成功时淡入主活动,但如果用户只能按返回则没有意义按钮并返回登录屏幕
  • @Annonymous177 the user can just press the back button and go back to the login screen - 您可以使用Intent 标志或在清单中声明noHistory 来防止这种行为。当您search 时,您会发现大量示例

标签: java android android-transitions activity-finish


【解决方案1】:

我刚刚分享了我的答案here。 使用supportFinishAfterTransition();

【讨论】:

    【解决方案2】:

    您提供的链接中的答案建议在您的活动顶部创建一个变量

    Boolean mShouldFinish = false;
    

    然后在您开始过渡到下一个活动后(在 startActivity(ctx,intent, bundle) 之后)添加:

    mShouldFinish = true;
    

    并添加覆盖 onStop 方法:

    @Override
    public void onStop() {
        super.onStop();
        if(mShouldFinish)
             finish();
    }
    

    【讨论】:

    • 我尝试了这种方法,但它似乎不起作用,因为即使没有 if(mShouldFinish) 为真,转换也没有完成
    • 当您从onActivityResult 启动Activity 时,这不起作用
    【解决方案3】:

    大家找到了解决办法, 而不是使用此代码进行转换

    if (Build.VERSION.SDK_INT >= 21) {
                        TransitionInflater inflater = TransitionInflater.from(LoginActivity.this);
                        Transition transition = inflater.inflateTransition(R.transition.fade_transition);
                        TransisitonTime = transition.getDuration()*2;
                        getWindow().setExitTransition(transition);
                    }
    
                    ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(LoginActivity.this);
    

    我用这个代替

    overridePendingTransition(R.animator.fade_in,
                            R.animator.fade_out);
    

    使用这些 xml 文件

    fade_in.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android">
        <alpha android:fromAlpha="0.0" android:toAlpha="1.0"
            android:interpolator="@android:anim/accelerate_interpolator"
            android:duration="2000"/>
    </set>
    

    fade_out.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android">
        <alpha android:fromAlpha="1.0" android:toAlpha="0.0"
            android:interpolator="@android:anim/accelerate_interpolator"
            android:duration="2000"/>
    </set>
    

    这样我可以在调用finish() 时进行淡入淡出过渡

    感谢 @Droidman 为我指明了正确的方向

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-10
      • 2011-06-13
      相关资源
      最近更新 更多