将重新进入动画更改为列表的另一个项目
Changing reenter animation to another item of a list
我有一个带有图像的 RecyclerView,当我按下一个图像时,应用程序会打开另一个 activity,其中包含一个具有相同图像但位于我选择的图像位置的 ViewPager。
我已经在 Lollipop 中完成了转换,以便在调用的 activity 中使用 supportPostponeEnterTransition 和 supportStartPostponedEnterTransition 在活动之间共享此图像,以等待 viewPager 加载图像以开始转换。
当我进入被调用的 activity 并且当我按下返回时,转换正常。
我面临的问题是,如果我移动到被调用 activity 的 ViewPager 中的另一个图像,当我按回它时,它会动画显示它在开始时选择的图像,而不是当前选择的图像一.
我已经能够将动画图像更改为在名为 activity 中选择的图像:
@Override
public void onBackPressed() {
View view = ((ImageDetailFragment) adapter.getFragment(viewPager,
viewPager.getCurrentItem())).getTransitionView();
ViewCompat.setTransitionName(view, Constants.TRANSITION_IMAGE);
super.onBackPressed();
}
但它return正在调用activity列表中原始图像的相同位置。
我怎样才能使图像 return 到它在调用 activity 列表中的位置?
首先要做的是确保视图在没有任何 Activity 转换的情况下正常工作。也就是说,当您从 Activity 使用 ViewPager 的 return 时,RecyclerView Activity 应该显示 ViewPage 显示的视图。当您调用 ViewPager activity 时,使用 startActivityForResult 并使用结果将 RecyclerView 滚动到正确的位置。
一旦它起作用,Activity 转换就可以起作用。我知道您已经为 RecyclerView 中的每个视图指定了不同的 transitionName,对吧?绑定视图时,调用 setTransitionName 并为其指定一个可重复的名称。通常这是图像 URL 或游标行 ID,或者最坏的情况是一些被修改的索引,如 "image_" + index.
接下来您需要做的是为调用 Activity(退出)和调用 activity(进入)设置 SharedElementCallback。在每一个中,您都需要重写 onMapSharedElements 回调以重新映射共享元素。
@Override
public void onMapSharedElements(List<String> names, Map<String, View> sharedElements) {
// assuming just one shared element, excuse the ugly code
sharedElements.put(names.get(0), mSharedElement);
}
这里,mSharedElement 已经设置在 onActivityReenter in the calling (RecyclerView) activity 和 onCreate 以及 finishAfterTransition (onBackPressed?) in the called (ViewPager) activity.
onActivityReenter 提供了专门针对这种情况的新功能。您可以在调用的 Activity 完成之前查看结果。
我有一个带有图像的 RecyclerView,当我按下一个图像时,应用程序会打开另一个 activity,其中包含一个具有相同图像但位于我选择的图像位置的 ViewPager。
我已经在 Lollipop 中完成了转换,以便在调用的 activity 中使用 supportPostponeEnterTransition 和 supportStartPostponedEnterTransition 在活动之间共享此图像,以等待 viewPager 加载图像以开始转换。
当我进入被调用的 activity 并且当我按下返回时,转换正常。
我面临的问题是,如果我移动到被调用 activity 的 ViewPager 中的另一个图像,当我按回它时,它会动画显示它在开始时选择的图像,而不是当前选择的图像一.
我已经能够将动画图像更改为在名为 activity 中选择的图像:
@Override
public void onBackPressed() {
View view = ((ImageDetailFragment) adapter.getFragment(viewPager,
viewPager.getCurrentItem())).getTransitionView();
ViewCompat.setTransitionName(view, Constants.TRANSITION_IMAGE);
super.onBackPressed();
}
但它return正在调用activity列表中原始图像的相同位置。
我怎样才能使图像 return 到它在调用 activity 列表中的位置?
首先要做的是确保视图在没有任何 Activity 转换的情况下正常工作。也就是说,当您从 Activity 使用 ViewPager 的 return 时,RecyclerView Activity 应该显示 ViewPage 显示的视图。当您调用 ViewPager activity 时,使用 startActivityForResult 并使用结果将 RecyclerView 滚动到正确的位置。
一旦它起作用,Activity 转换就可以起作用。我知道您已经为 RecyclerView 中的每个视图指定了不同的 transitionName,对吧?绑定视图时,调用 setTransitionName 并为其指定一个可重复的名称。通常这是图像 URL 或游标行 ID,或者最坏的情况是一些被修改的索引,如 "image_" + index.
接下来您需要做的是为调用 Activity(退出)和调用 activity(进入)设置 SharedElementCallback。在每一个中,您都需要重写 onMapSharedElements 回调以重新映射共享元素。
@Override
public void onMapSharedElements(List<String> names, Map<String, View> sharedElements) {
// assuming just one shared element, excuse the ugly code
sharedElements.put(names.get(0), mSharedElement);
}
这里,mSharedElement 已经设置在 onActivityReenter in the calling (RecyclerView) activity 和 onCreate 以及 finishAfterTransition (onBackPressed?) in the called (ViewPager) activity.
onActivityReenter 提供了专门针对这种情况的新功能。您可以在调用的 Activity 完成之前查看结果。