如何在使用列表/网格/回收站视图时为活动转换设置动画?

Gui*_*rme 6 android material-design activity-transition android-recyclerview

我正在尝试实现一些新的Material Design活动动画,但我读过的教程仅显示了要动画的视图属于活动的示例.

在我的应用程序中,我使用的是RecyclerView,所以ImageView它不是活动的一部分:

MainActivity                -> Where I call startActivity()
 ? MainFragment
  ? RecyclerView
   ? RecyclerViewAdapter
    ? ViewHolder
     ? ImageView            -> The hero imageView I'd like to animate
Run Code Online (Sandbox Code Playgroud)

根据我的阅读,我应该开始这样的新活动:

ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(this, (View) mImageView, "hero_image");

Intent intent = new Intent(this, SecondActivity.class);
startActivityForResult(intent, options.toBundle());
Run Code Online (Sandbox Code Playgroud)

问题是:那mImageView不属于MainActivity.我该如何通过呢?

Geo*_*unt 2

在您的示例中,您以相同的方式启动活动。View 是 Activity 的 View Hierarchy 的一部分,因此调用仍然有效。当存在退出转换时,将搜索活动的视图层次结构以查找要在退出转换中使用的退出视图。它将对象与共享元素的对象进行比较,以便它不会退出共享元素。

当您使用 RecyclerView 时,您可能需要担心重新进入转换。RecyclerView 可以回收任何或所有 View。如果您没有为共享元素(或潜在共享元素)提供唯一名称,则必须实现 onMapSharedElements 以确保使用正确的视图。我总是建议在使用潜在共享元素列表时,为每个元素指定一个唯一的transitionName(动态)。这样框架就可以在返回时自动确定使用哪个视图。