如何使用共享元素处理返回转换?

时间:2016-12-31 03:06:02

标签: android animation callback transition

我想实现自定义Process转换。我在两个活动(Pre-LollipopA)中都有一个共享元素,这是一个简单的B。我使用共享元素的自定义转换的工作原理与ImageView转换相同。首先,我将native活动的背景设置为透明,然后捕获共享元素的开始状态并将此数据传递给B活动。在B中,我捕获共享视图的结束状态并创建一个B,它将为两个状态之间的视图设置动画,当然这个动画发生在Animator活动中。

此时,只要我在两个活动中都拥有相同的共享元素,一切都很完美,并且我能够应用适当的返回转换。但是,当我想实现某种类型的库(当你可以在B活动中向左和向右滑动图像时)我遇到了返回转换的问题。在这种情况下,两个活动共享相同的数据源,因此用户只需更改B活动中的共享元素即可。那么,如果我在第二个活动中更改共享元素怎么办?那么,显然,为了实现返回转换,我需要知道B活动中该元素的大小和位置,对吧?

基本上,我们只有A个方案(如果我错了,请纠正我):

  • 使用2回调将该共享元素的状态从B传递到A个活动,并在onActivityResult中应用返回动画。
  • 以某种方式从A活动中获取共享元素的属性,并在A中实现返回动画。

此外,我还必须重新绘制B或使用RecyclerViewrequestLayout()方法保存数据的任何内容。

我知道我可以使用invalidate()回调和native方法通过SharedElementCallback转换实现所有这些内容。该框架以某种方式处理以在被调用的活动中应用此返回转换而不是在调用者中。

所以,我想知道是否有其他选择?

1 个答案:

答案 0 :(得分:0)

最后,我找到了问题的答案。正如我后面所说,我们只有两个场景,所以我实现了第二个场景。在这种情况下,我们可以应用发布 - 订阅模式,因此可以从第一个活动中检索数据并将请求的数据发送到第二个活动。只要我在第二个活动中有适当的数据,我就可以将图像设置回第一个活动中的位置。

为了实现发布 - 订阅模式,我使用了Otto,这是一个事件总线,它提供了一种机制,可以用来与应用程序的不同部分进行通信。

您可以找到此想法here的实现。您还可以找到使用原生过渡的示例。