Android - 调用活动完成的共享元素转换()

F.A*_*.A. 28 java android activity-finish android-5.0-lollipop shared-element-transition

我正在努力使应用程序更具实质性,而我只是坚持如何实现一些共享元素转换.我有一个活动A,它启动另一个B然后调用finish()以便从后栈中删除它.在我的情况下,我有一个我想在两个活动之间分享的元素,但是一旦它从A传递到B,A就不再重要了.如果我在startActivity(ctx,intent,bundle)之后没有调用finish(),则退出/输入动画效果很好.但是,如果我打电话给完成,那么在动画开始之前会有一个非常丑陋的闪烁.

我有什么东西可以忽略,或者是不可能做我想做的事情?

ksa*_*kar 27

UPDATE

更好,更简单的方式

ActivityCompat. finishAfterTransition(this);
Run Code Online (Sandbox Code Playgroud)

<3支持库.

  • 这仍然会导致我使用共享元素闪烁. (14认同)
  • @ksarmalkar,`finishAfterTransition`在转换完成后不会调用`finish`*; 它只是立即调用`finish`.因此,如果您从活动A转换为B,并且B淡入,则A消失,因此主屏幕会渗透(或可能是另一个活动).注意:这似乎只在使用共享转换时才会发生. (7认同)
  • 我似乎无法找到`finishWithTransition`.所以我尝试了`finishAfterTransition`并且也没有工作. (2认同)

l-l*_*l-l 25

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

@Override
public void onStop() {
    super.onStop();
    if(mShouldFinish)
         finish();
}
Run Code Online (Sandbox Code Playgroud)

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

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


ahm*_*_89 5

这可能是晚了但我遇到了同样的问题.对我有用的是:

supportFinishAfterTransition();
Run Code Online (Sandbox Code Playgroud)

这包含在支持库中,就像魅力一样.

PS:你打电话finish()时不需要打电话supportFinishAfterTransition().