6

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

在我的应用程序中,我使用的是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不属于MainActivity. 我应该如何通过它?

4

1 回答 1

2

在您的示例中,您以相同的方式启动 Activity。View 是 Activity 的 View Hierarchy 的一部分,所以调用仍然有效。当存在退出转换时,会在 Activity 的 View Hierarchy 中搜索要在退出转换中使用的退出 View。它将对象与共享元素的对象进行比较,这样它就不会退出共享元素。

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

于 2015-01-17T20:45:28.563 回答