gpt4 book ai didi

android - 将重新进入动画更改为列表的另一个项目

转载 作者:太空宇宙 更新时间:2023-11-03 12:32:31 25 4
gpt4 key购买 nike

我有一个带有图像的 RecyclerView,当我按下一个图像时,应用程序会打开另一个 Activity ,其中包含一个具有相同图像但位于我选择的图像位置的 ViewPager。

我已经在 Lollipop 中完成了转换,以便在调用的 Activity 中使用 supportPostponeEnterTransition 和 supportStartPostponedEnterTransition 在 Activity 之间共享此图像,以等待 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();
}

但它返回到调用 Activity 列表中原始图像的相同位置。

我怎样才能使图像返回到它在调用 Activity 列表中的位置?

最佳答案

首先要做的是确保 View 在没有任何 Activity 转换的情况下正常工作。也就是说,当您使用 ViewPager 从 Activity 返回时,RecyclerView Activity 应该显示 ViewPage 正在显示的 View 。当您调用 ViewPager Activity 时,使用 startActivityForResult 并使用结果将 RecyclerView 滚动到正确的位置。

一旦一切正常, Activity 转换就可以开始工作了。我知道您已经为 RecyclerView 中的每个 View 指定了不同的 transitionName,对吗?绑定(bind) View 时,调用 setTransitionName 并为其指定一个可重复的名称。通常这是图像 URL 或光标行 ID,或者在最坏的情况下是一些经过修改的索引,如“image_”+ 索引。

您需要做的下一件事是为调用 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 已在调用 (RecyclerView) Activity 的 onActivityReenter 和 onCreate 以及被调用 (ViewPager) Activity 的 finishAfterTransition (onBackPressed?) 之前设置。

onActivityReenter 提供了专门针对这种情况的新功能。您可以在调用的 Activity 完成之前查看结果。

关于android - 将重新进入动画更改为列表的另一个项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29447010/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com