了解活动返回转换

时间:2015-10-02 22:35:45

标签: android android-transitions activity-transition

当我从活动A启动活动B时,我正在使用自定义共享元素转换。一切都运行良好。

我想使用另一个自定义Transition,它不涉及从活动B返回到活动A的任何共享元素。但是,我遇到了几个部分的问题:

  1. 如何告诉框架返回转换不涉及任何共享元素?
  2. 返回转换中的转换的起始值和结束值是多少?对于输入转换,我主要操纵活动B的视图,因为它们是在活动A的基础上绘制的。返回过渡会发生什么?
  3. 感谢我能得到的任何帮助!

    编辑:

    进一步的调查显示,即使我正在呼叫createAnimator,我的回复转换setSharedElementReturnTransition甚至都没有被调用。但我知道set调用正在做某事,因为它现在不会尝试反转原始的输入动画(默认行为)而不是仅重叠两个视图。

    编辑#2:

    在看了乔治·芒的回答之后,我补充说了

    @Override
    public void captureStartValues(TransitionValues transitionValues) {
        transitionValues.view.setVisibility(View.VISIBLE);
    }
    
    @Override
    public void captureEndValues(TransitionValues transitionValues) {
        transitionValues.view.setVisibility(View.INVISIBLE);
    }
    

    现在这导致我的返回转换createAnimator至少运行,尽管动画仍然很奇怪。为什么能见度很重要?

2 个答案:

答案 0 :(得分:2)

  1. 您必须设置SharedElementCallback并在onMapSharedElements中清除共享元素映射。这将消除您的过渡中的共享元素。
  2. 这取决于您所谈论的转变。具体来说,返回转换的起始结束值是View.VISIBLE和View.INVISIBLE。但是在返回时会发生几次转换:
  3. 返回转换:通过更改其可见性,从活动B中的场景中删除非共享元素。

    共享元素返回转换:活动B中​​的共享元素从调用finishAfterTransition时的位置开始,并在活动A表示共享元素的位置结束。这可以通过SharedElementCallback的{​​{1}}和onSharedElementStart进行调整,这些内容在返回时会被反向调用。

    重新过渡:活动A中的非共享元素视图会更改其可见性。

    共享元素重新转换:通常没有,但共享元素在进入活动A后可以执行一些特殊操作。

答案 1 :(得分:2)

我实际上发现导致我的返回过渡的罪魁祸首#{1}}无法运行。显然,如果转换框架认为转换视图的起始和结束状态相同,则不会创建动画师。因此,在createAnimatorcaptureStartState中添加一些虚拟但不同的值最终会导致我的返回转换正常运行。