Android - 具有调用活动 finish() 的共享元素过渡

我正在努力使应用程序更加材料化,我只是卡在如何实现一些共享元素转换上。我有一个活动A,它启动另一个B,然后调用finish()以将其从后退堆栈中删除。就我而言,我想在两个活动之间共享一个元素,但是一旦它从A传递到B,A就不再重要了。如果我在startActivity(ctx,intent,bundle)之后不调用finish(),则退出/进入动画可以完美地工作。但是,如果我确实调用了完成,那么在动画开始之前会有一个非常丑陋的闪烁。

有没有我忽略了什么,或者就是不可能做我想做的事情?


答案 1

您可以在 onStop 函数中完成您的活动,如果您只想在从 A 过渡到 B 时发生这种情况,那么请创建一个标志并在调用 startActivity(ctx,intent,bundle) 后进行设置:

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

确保在完成活动 B 时调用 finish() 而不是 finishAfterTranstion(),因为活动 A 不再存在

完成活动 A 后,如果按 back 键,B 中的共享元素可能会在屏幕中挂起。将 transitionName 设置为 null 以避免出现这种情况。ActivityB.onEnterAnimationComplete


答案 2

更新

更好,更简单的方法

ActivityCompat. finishAfterTransition(this);

<3 支持库。


推荐