共享元素过渡到 RecyclerView 中的视图,可能吗?

Shared Element Transition into a View in a RecyclerView, possible?

鉴于 Activity 的正常 Lollipop 转换具有共享元素,例如https://github.com/codepath/android_guides/wiki/Shared-Element-Activity-Transition,从 Recycler View 的 View 过渡到目标 Activity 的普通 View 是很常见的。

但是,如果目标视图也在 recyclerView 的视图持有者中,有没有办法使之成为可能(即向 ActivityOptionsCompat 提供目标视图)?

谢谢!

根据我的调查,这是不可能的。在共享元素转换可以创建其动画之前,它必须首先捕获每个共享元素的开始和结束状态——即它在调用和被调用中的位置、大小和外观 Activities/Fragments。有了这些信息,过渡可以确定每个共享元素视图应该如何动画到位。 (来自 http://www.androiddesignpatterns.com/2015/01/activity-fragment-shared-element-transitions-in-depth-part3a.html

官方文档声明限制:

Classes that extend AdapterView, such as ListView, manage their child views in ways that are incompatible with the transitions framework. If you try to animate a view based on AdapterView, the device display may hang.

http://developer.android.com/training/transitions/overview.html#Limitations

绝对有可能。这样做你必须遵循以下步骤:

  1. supportPostponeEnterTransition() 推迟目标 activity 中的转换。
  2. 将适配器设置为 RecyclerView。
  3. 在 RecyclerView 绘制完项目后开始延迟转换。

第 3 步通常适用于此:

recyclerview.post(new Runnable() {
            @Override
            public void run() {
                supportStartPostponedEnterTransition();
            }
        });