考虑到Activity共享元素的普遍过渡,例如https://github.com/codepath/android_guides/wiki/Shared-Element-Activity-Transition,从RecyclerView中的View转换为目标Activity中的普通View是很常见的。
然而,在目标视图也位于recyclerView的viewholder中的情况下,有没有办法实现这一点(即提供目标视图给ActivityOptionsCompat)?
谢谢!
然而,在目标视图也位于recyclerView的viewholder中的情况下,有没有办法实现这一点(即提供目标视图给ActivityOptionsCompat)?
谢谢!
完全可以实现。您需要按照以下步骤操作:
supportPostponeEnterTransition()
延迟目标活动中的转换。通常情况下,第三步的操作如下:
recyclerview.post(new Runnable() {
@Override
public void run() {
supportStartPostponedEnterTransition();
}
});
根据我的调查,这是不可能的。在共享元素转换可以创建其动画之前,它必须首先捕获每个共享元素的起始和结束状态——即其在调用和被调用的活动/片段中的位置、大小和外观。有了这些信息,转换就可以确定每个共享元素视图应该如何动画到位。(通过http://www.androiddesignpatterns.com/2015/01/activity-fragment-shared-element-transitions-in-depth-part3a.html)
官方文档声明了限制:
扩展AdapterView(例如ListView)的类以与转换框架不兼容的方式管理其子视图。如果您尝试基于AdapterView动画显示器,则设备显示器可能会挂起。
http://developer.android.com/training/transitions/overview.html#Limitations