gpt4 book ai didi

android - ViewPager fragment - 共享元素转换

转载 作者:IT老高 更新时间:2023-10-28 22:09:07 27 4
gpt4 key购买 nike

我正在开发的应用程序显示图像网格。当您点击图像时,它会进入详细信息 View 。详细信息 View 包含一个 ViewPager,它允许您在网格中的每个图像之间滑动。这是通过传递路径列表(包含网格中的每个图像)以及被点击的图像的偏移量来完成的,因此可以将 ViewPager 设置为最初显示该页面。

在 ViewPager 的当前偏移页面的 Fragment 内有一个共享元素转换的最佳方式是什么?网格 (RecyclerView) 图像应在当前页面中展开为全屏图像。我看到了推迟和恢复 Activity 转换的能力,因此应用程序将等待显示共享元素转换,直到从磁盘加载图像。但我希望能够使其动画到 View 寻呼机中的正确页面,并在用户返回时退出到当前页面(因为您可以在页面之间滑动)。如果您现在滑动到其他页面,则初始页面会以动画方式返回到网格中。

目前,我为 View 寻呼机的 Fragments 中的每个图像分配了一个格式为“image_[index]”的 transitionName。当我开始详细信息 Activity 时,我使用相同的 transitionName ,索引是偏移量。

与此相关,我也想知道如何使涟漪与长按一起工作。当您更改 View 的激活状态时,它似乎取消了涟漪。我想要一个类似于 Gmail 的效果,在长按完成并触发激活状态后,涟漪会重新开始并快速结束。

最佳答案

据我所知(如果我错了,请纠正我),你想要实现的基本上是这样的:假设你有一个 MainActivity,一个 DetailsActivity,以及任意一组图像。 MainActivity 在网格中显示图像集,DetailsActivity 在水平ViewPager 中显示相同的图像集。当用户在 MainActivity 中选择一个图像时,该图像应该从它在网格中的位置转换到第二个 Activity 的 ViewPager 中的正确页面。

我们要解决的问题是“如果用户在DetailsActivity内切换页面怎么办”?如果发生这种情况,我们希望更改将在返回转换期间使用的共享图像。默认情况下, Activity 转换框架将使用在进入转换期间使用的共享元素......但是 View 寻呼机的页面已经改变,所以显然我们希望以某种方式覆盖这个行为。为此,我们需要在 MainActivityDetailsActivityonCreate() 方法中设置 SharedElementCallback并像这样覆盖 onMapSharedElements() 方法:

private final SharedElementCallback mCallback = new SharedElementCallback() {
@Override
public void onMapSharedElements(List<String> names, Map<String, View> sharedElements) {
if (mCurrentImagePosition != mOriginalImagePosition) {
View sharedView = getImageAtPosition(mCurrentImagePosition);
names.clear();
sharedElements.clear();
names.add(sharedView.getTransitionName());
sharedElements.put(sharedView.getTransitionName(), sharedView);
}
}

/**
* Returns the image of interest to be used as the entering/returning
* shared element during the activity transition.
*/
private View getImageAtPosition(int position) {
// ...
}
};

为了更完整的解决方案,我创建了 sample project on GitHub这将达到这种效果(在单个 StackOverflow 答案中发布的代码太多)。

关于android - ViewPager fragment - 共享元素转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27304834/

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