【问题标题】:How to handle return transition with shared elements?如何使用共享元素处理返回转换?
【发布时间】:2017-05-15 06:37:45
【问题描述】:

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

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

基本上,我们只有2 场景(如果我错了,请纠正我)这样做:

  • 使用onActivityResult 回调将共享元素的状态从B 传递给A 活动,并在A 中应用返回动画。
  • 不知何故从A活动中获取共享元素的属性并在B中实现返回动画。

此外,我还必须使用requestLayout()invalidate() 方法重新绘制RecyclerView 或保留数据的任何内容。

我知道我可以使用SharedElementCallback 回调和onActivityReenter() 方法通过native 转换来实现所有这些东西。该框架以某种方式处理将这个返回转换应用于被调用的活动而不是调用者。

那么,我想知道是否有其他选择?

【问题讨论】:

    标签: android animation callback transition


    【解决方案1】:

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

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

    你可以找到这个想法的实现here。您还可以在此处找到使用本机转换的示例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-03
      • 2017-11-02
      • 1970-01-01
      • 1970-01-01
      • 2015-08-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多