【发布时间】:2017-05-15 06:37:45
【问题描述】:
我想实现自定义Pre-Lollipop 转换。我在两个活动中都有一个共享元素(A 和B),即简单的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