android - 了解 Activity 返回转换

标签 android android-transitions activity-transition

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

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

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

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

编辑:

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

编辑#2:

看了George Mount的回答,补充了

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

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

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

最佳答案

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

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

Shared Element Return Transition:Activity B 中的共享元素从调用 finishAfterTransition 时的位置开始,到 Activity A 表示共享元素所在的位置结束。这可以通过 SharedElementCallbackonSharedElementStartonSharedElementEnd 进行调整,它们在返回期间被反向调用。

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

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

关于android - 了解 Activity 返回转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32916837/

相关文章:

android - 如何接收 RINGER_MODE_CHANGED_ACTION 的广播

android - 共享元素转换在三个或更多 Activity 之间中断

android - 使 Activity 从上到下动画

android - 使用动态位图设置在Android上实现KenBurns效果

Android 警报对话框不会关闭

android - 在不同方向的 Activity 之间使用共享元素转换

android - ViewPager fragment - 共享元素转换

android - 为什么 Transition.captureStartValues 和 Transition.captureEndValues 具有具有相同属性的相同 View ?

android - 在android中将二维字符串数组转换为ArrayList

android - 在滑动时创建从一种布局到另一种布局的透明扩展圆圈过渡动画