【问题标题】:Understanding activity return transitions了解活动返回转换
【发布时间】:2015-10-02 22:35:44
【问题描述】:

当我从活动 A 启动活动 B 时,我目前正在使用自定义共享元素转换。一切正常。

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

  1. 如何告诉框架返回转换不涉及任何共享元素?
  2. 返回转换中转换的开始值和结束值是多少?对于进入转换,我主要操纵活动 B 的视图,因为它们绘制在活动 A 的顶部。退货过渡会发生什么?

感谢我能得到的任何帮助!

编辑:

进一步调查显示,即使我正在调用 setSharedElementReturnTransition,我的返回转换的 createAnimator 甚至都没有被调用。但我知道 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 至少运行,尽管动画仍然很奇怪。为什么可见性很重要?

【问题讨论】:

    标签: android android-transitions activity-transition


    【解决方案1】:
    1. 您必须设置 SharedElementCallback 并在 onMapSharedElements 中清除共享元素映射。这将从您的过渡中消除共享元素。
    2. 这取决于您所说的转换。具体来说,返回转换的开始结束值是 View.VISIBLE 和 View.INVISIBLE。但是在返回时会发生几个转换:

    返回过渡:通过更改其可见性,将非共享元素从 Activity B 的场景中移除。

    共享元素返回过渡:Activity B 中的共享元素从调用finishAfterTransition 时所在的位置开始,并在Activity A 所说的共享元素所在位置结束。这可以通过SharedElementCallbackonSharedElementStartonSharedElementEnd来调整,在返回的时候反向调用。

    重新进入转换:来自 Activity A 的非共享元素视图改变了它们的可见性。

    Shared Element Reenter Transition:通常什么都不做,但是shared element在进入Activity A之后可以做一些特别的事情。

    【讨论】:

    • 如果我清除了共享元素映射,那是否也会从我的输入过渡中删除共享元素过渡?我只想将它从返回转换中删除。
    • 您还可以澄清返回/重新进入“改变他们的知名度”吗?如果我想做一些自定义的事情,例如将元素滑出以进行返回过渡,那么可见性与任何事情有什么关系?
    • 第一个问题,是的。但是,您可以在离开时设置不同的 SharedElementCallback 或具有不同的逻辑。 WRT 可见性:滑动、爆炸和淡出过渡都是可见性过渡(检查继承),并响应可见性的变化以及缺失。如果你想要一些自定义的东西,也可以从 Visibility 派生你的类。
    • 感谢您的帮助!我现在更好地理解了转换 :) 我实际上找到了导致我的错误的罪魁祸首,我将在这里添加一个答案。这是赏金!
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多