Android 如何在使用列表/栅格/回收器视图时设置活动转换动画?

Android 如何在使用列表/栅格/回收器视图时设置活动转换动画?,android,material-design,android-recyclerview,activity-transition,Android,Material Design,Android Recyclerview,Activity Transition,我正在尝试实现一些新材质设计活动动画,但我阅读的教程仅显示了要设置动画的视图属于活动的示例 在我的应用程序中,我使用的是RecyclerView,因此ImageView不是活动的一部分: MainActivity -> Where I call startActivity() ↳ MainFragment ↳ RecyclerView ↳ RecyclerViewAdapter ↳ ViewHolder ↳ ImageView

我正在尝试实现一些新材质设计活动动画,但我阅读的教程仅显示了要设置动画的视图属于活动的示例

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

MainActivity                -> Where I call startActivity()
 ↳ MainFragment
  ↳ RecyclerView
   ↳ RecyclerViewAdapter
    ↳ ViewHolder
     ↳ ImageView            -> The hero imageView I'd like to animate
从我所读到的,我应该开始这样的新活动:

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

Intent intent = new Intent(this, SecondActivity.class);
startActivityForResult(intent, options.toBundle());

问题是:
mImageView
不属于
main活动。我应该如何通过它?

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


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

“不属于MainActivity”,因此它在活动屏幕中不可见?如果它是可见的,那么它属于你的活动。我的意思是,它没有在活动中直接膨胀。它在适配器中膨胀,因此活动不包含对该视图的引用。不是适配器,而是适配器设置为的视图,在调用
startActivity()
时包含对该图像视图的引用?例如,这是对用户单击回收器视图中的一个图像项的响应吗?此外,
RecyclerView
是活动层次结构中的一个视图,与任何其他视图一样。。。回收器视图显示的
ImageView
s是其子视图。所以说图像视图不属于活动是不正确的。如果活动引用了recycler视图(我假设它引用了),那么它可以通过迭代其子视图,利用
RecyclerView#findViewWithTag()
方法等找到它。我想我理解视图是活动层次结构的一部分,但我不知道如何获得对
RecyclerView
特定项目的特定
ImageView
的引用。有很多方法可以做到这一点,这取决于你的应用程序是如何编写的。如果在触发startActivity调用的共享元素附近有用户操作(单击侦听器),则单击的视图可以与findViewById一起使用,以查找特定的ImageView。如果单击的视图是近亲视图,则可能必须在层次结构中向上走。如果单击不相关(例如,“打开选中项”按钮),则必须以自己的方式跟踪视图。findViewWithTag()或findViewHolderForItemId()可能会有所帮助。小心使用RecyclerView——屏幕外的任何项目都不能共享。
onMapSharedElements
帮助我修复了一个转换。谢谢