如何处理共享元素的 return 过渡?
How to handle return transition with shared elements?
我想实现自定义 Pre-Lollipop
转换。我在两个活动(A
和 B
)中都有一个共享元素,这是一个简单的 ImageView
。我使用共享元素的自定义过渡的工作原理与 native
过渡相同。首先,我将 B
activity 的背景设置为透明,然后我捕获共享元素的开始状态并将此数据传递给 B
activity。在 B
中,我捕获了共享视图的结束状态并创建了一个 Animator
来为两个状态之间的视图设置动画,当然该动画发生在 B
activity 中。
此时,只要我在两个活动中有相同的共享元素,一切就完美了,我可以应用适当的 return 转换。但是,当我想实现某种画廊时(当您可以在 B
activity 中向左和向右滑动图像时)我遇到了 return 过渡的问题。在这种情况下,两个活动共享相同的数据源,因此用户可以简单地更改 B
activity 中的共享元素。那么,如果我在第二个 activity 中更改共享元素会怎样?然后,显然,为了实现 return 转换,我需要知道 A
activity 中该元素的大小和位置,对吧?
基本上,我们只有 2
个场景(如果我错了请纠正我):
- 使用
onActivityResult
回调将该共享元素的状态从 B
传递到 A
activity,并在 [=12] 中应用 return 动画=].
- 以某种方式从
A
activity 获取共享元素的属性并在 B
. 中实现 return 动画
此外,我还必须重绘 RecyclerView
或使用 requestLayout()
或 invalidate()
方法保留数据的任何内容。
我知道我可以使用 SharedElementCallback
回调和 onActivityReenter()
方法通过 native
转换实现所有这些东西。这个框架以某种方式处理在被调用的 activity 中而不是在调用者中应用这个 return 转换。
所以,我想知道是否有其他选择?
我想实现自定义 Pre-Lollipop
转换。我在两个活动(A
和 B
)中都有一个共享元素,这是一个简单的 ImageView
。我使用共享元素的自定义过渡的工作原理与 native
过渡相同。首先,我将 B
activity 的背景设置为透明,然后我捕获共享元素的开始状态并将此数据传递给 B
activity。在 B
中,我捕获了共享视图的结束状态并创建了一个 Animator
来为两个状态之间的视图设置动画,当然该动画发生在 B
activity 中。
此时,只要我在两个活动中有相同的共享元素,一切就完美了,我可以应用适当的 return 转换。但是,当我想实现某种画廊时(当您可以在 B
activity 中向左和向右滑动图像时)我遇到了 return 过渡的问题。在这种情况下,两个活动共享相同的数据源,因此用户可以简单地更改 B
activity 中的共享元素。那么,如果我在第二个 activity 中更改共享元素会怎样?然后,显然,为了实现 return 转换,我需要知道 A
activity 中该元素的大小和位置,对吧?
基本上,我们只有 2
个场景(如果我错了请纠正我):
- 使用
onActivityResult
回调将该共享元素的状态从B
传递到A
activity,并在 [=12] 中应用 return 动画=]. - 以某种方式从
A
activity 获取共享元素的属性并在B
. 中实现 return 动画
此外,我还必须重绘 RecyclerView
或使用 requestLayout()
或 invalidate()
方法保留数据的任何内容。
我知道我可以使用 SharedElementCallback
回调和 onActivityReenter()
方法通过 native
转换实现所有这些东西。这个框架以某种方式处理在被调用的 activity 中而不是在调用者中应用这个 return 转换。
所以,我想知道是否有其他选择?