Android 理解活动返回转换

Android 理解活动返回转换,android,android-transitions,activity-transition,Android,Android Transitions,Activity Transition,当我从活动a启动活动B时,我目前正在使用自定义共享元素转换。一切都很完美 我想使用另一个自定义的转换,它不涉及从活动B返回到活动A的返回转换的任何共享元素。但是,我在几个部分遇到了问题: 我如何告诉框架返回转换不涉及任何共享元素 返回转换中转换的起始值和结束值是什么?对于enter转换,我主要操纵活动B的视图,因为它们是在活动A的顶部绘制的。在返回转换中会发生什么 谢谢你给我的任何帮助 编辑: 进一步的调查显示,即使我正在调用setSharedElementReturnTransition,我的

当我从活动a启动活动B时,我目前正在使用自定义共享元素转换。一切都很完美

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

  • 我如何告诉框架返回转换不涉及任何共享元素
  • 返回转换中转换的起始值和结束值是什么?对于enter转换,我主要操纵活动B的视图,因为它们是在活动A的顶部绘制的。在返回转换中会发生什么
  • 谢谢你给我的任何帮助

    编辑:

    进一步的调查显示,即使我正在调用
    setSharedElementReturnTransition
    ,我的返回转换的
    createAnimator
    也没有被调用。但是我知道set调用正在做一些事情,因为它现在不尝试反转原始的enter动画(默认行为),而只是重叠两个视图

    编辑#2:

    在看了乔治·蒙特的答案后,我补充道

    @Override
    public void captureStartValues(TransitionValues transitionValues) {
        transitionValues.view.setVisibility(View.VISIBLE);
    }
    
    @Override
    public void captureEndValues(TransitionValues transitionValues) {
        transitionValues.view.setVisibility(View.INVISIBLE);
    }
    
    这导致我的返回转换的
    createAnimator
    至少运行了,尽管动画仍然很奇怪。为什么能见度很重要

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

    Shared Element Return Transition:活动B中的共享元素从调用
    finishAfterTransition
    时的位置开始,并在活动A显示共享元素的位置结束。这可以通过SharedElementStart和SharedElementEnd上的
    SharedElementCallback
    进行调整,在返回过程中反向调用

    重新输入转换:活动A中的非共享元素视图更改其可见性


    共享元素重新进入转换:通常什么都不做,但共享元素在进入活动A后可以做一些特殊的事情。

    我实际上找到了导致返回转换的
    createAnimator
    无法运行的罪魁祸首。显然,如果转换框架认为转换视图的开始和结束状态是相同的,它将不会创建动画。因此,在
    captureStartState
    captureEndState
    中添加一些虚拟但不同的值,最终导致我的返回转换正常运行。

    如果我清除共享元素映射,这不会也从我的输入转换中删除共享元素转换吗?我只想将其从返回转换中删除。您还可以澄清返回/重新输入“更改其可见性”吗?如果我想做一些定制的事情,比如为返回转换滑出元素,那么可见性与任何事情都有什么关系?对于第一个问题,是的。但是,当您离开或使用不同的逻辑时,可以设置不同的SharedElementCallback。WRT可见性:滑动、分解和淡入过渡都是可见性过渡(检查继承性),并响应可见性和缺勤的更改。如果你想定制一些东西,也可以从可见性派生你的类。谢谢你的帮助!我现在对转换有了更好的理解:)我实际上找到了导致我的bug的罪魁祸首,我将在这里添加一个答案。这是赏金!