afo*_*tad 26 animation android activity-transition shared-element-transition sharedelementcallback
我正在开发的应用程序显示图像网格.点击图像时,它会进入详细信息视图.详细信息视图包含一个ViewPager,允许您在网格中的每个图像之间滑动.这是通过传递路径列表(包含网格中的每个图像)以及被点击的图像的偏移来完成的,因此可以将ViewPager设置为最初显示该页面.
在ViewPager中当前偏移页面的Fragment内部进行共享元素转换的最佳方法是什么?网格(RecyclerView)图像应扩展为当前页面中的全屏图像.我看到了推迟和恢复活动转换的能力,因此应用程序将等待显示共享元素转换,直到从磁盘加载图像.但我希望能够使其在视图寻呼机中对正确的页面进行动画处理,并在用户返回时退出到当前页面的任何内容(因为您可以在页面之间滑动).如果您现在滑动到其他页面,则初始页面会回显到网格中.
目前,我使用"image_ [index]"格式的transitionName为视图寻呼机的片段中的每个图像分配.当我启动详细信息活动时,我使用相同的transitionName,索引是偏移量.
与此相关,我也想知道如何使用长按压使涟漪起作用.当您更改视图的激活状态时,它似乎取消了波纹.我想要一种类似于Gmail的效果,其中纹波重新开始并在长按完成后快速完成并触发激活状态.
Ale*_*ood 35
从我所知道的(如果我错了,纠正我),你想要实现的基本上是这样的:假设你有一个MainActivity,一个DetailsActivity和一组任意的图像.所述MainActivity显示器在网格图像组和所述DetailsActivity显示器在水平同一组图像ViewPager.当用户选择图像时MainActivity,该图像应该从其在网格中的位置转换到第二个活动中的正确页面ViewPager.
我们想要解决的问题是"如果用户在内部切换页面DetailsActivity怎么办?" 如果发生这种情况,我们希望更改将在返回转换期间使用的共享映像.默认情况下,活动转换框架将使用在enter转换期间使用的共享元素...但是视图分页器的页面已更改,因此显然我们希望以某种方式覆盖此行为.要做到这一点,我们需要设置一个SharedElementCallback你MainActivity和DetailsActivity的onCreate()方法和覆盖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) {
// ...
}
};
Run Code Online (Sandbox Code Playgroud)
为了获得更完整的解决方案,我在GitHub上创建了一个实现这种效果的示例项目(在单个StackOverflow答案中发布了太多代码).
| 归档时间: |
|
| 查看次数: |
10133 次 |
| 最近记录: |