如何在转换完成后完成 activity Android
How to finish an activity when transition is done Android
我想在 2 个 Activity 之间的转换完成后结束前一个 activity
我已经尝试了 ActivityCompat.finishAfterTransition(this);
但它实际上在转换完成之前完成了 activity
我之前研究过 但我无法理解答案,如果有人能解释如何在转换完成后结束 activity 就更好了
更新:
我刚试过像这样开始下一个 activity
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 不会被激活,所以我应该手动激活它吗?如果是,建议这样做
您提供的 link 中的答案建议在 activity
的顶部创建一个变量
Boolean mShouldFinish = false;
然后在开始过渡到下一个 activity 之后(在 startActivity(ctx,intent, bundle) 之后)添加:
mShouldFinish = true;
并添加重写 onStop 方法:
@Override
public void onStop() {
super.onStop();
if(mShouldFinish)
finish();
}
伙计们找到了解决办法,
而不是使用此代码进行转换
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 为我指明了正确的方向
我刚刚分享了我的答案。
使用 supportFinishAfterTransition();
我想在 2 个 Activity 之间的转换完成后结束前一个 activity
我已经尝试了 ActivityCompat.finishAfterTransition(this);
但它实际上在转换完成之前完成了 activity
我之前研究过
更新:
我刚试过像这样开始下一个 activity
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 不会被激活,所以我应该手动激活它吗?如果是,建议这样做
您提供的 link 中的答案建议在 activity
的顶部创建一个变量Boolean mShouldFinish = false;
然后在开始过渡到下一个 activity 之后(在 startActivity(ctx,intent, bundle) 之后)添加:
mShouldFinish = true;
并添加重写 onStop 方法:
@Override
public void onStop() {
super.onStop();
if(mShouldFinish)
finish();
}
伙计们找到了解决办法, 而不是使用此代码进行转换
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 为我指明了正确的方向
我刚刚分享了我的答案supportFinishAfterTransition();