如何解决从GridViewFragment到ViewPager2Fragment
有两个片段,一个是带有GridView的galleryFragment,另一个是带有ViewPager2的ViewPager2Fragment,单击GridView的项目时,用户将导航到ViewPager2Fragment。
我通过在两个项目之间添加相同的TransitionName(“ gallery_image” + itemPosition)添加了ShareElement。 galleryFragment的项目单击:
FragmentNavigator.Extras extras = new FragmentNavigator.Extras.Builder()
.addSharedElement(view,"gallery_image" + position)
.build();
Navigation.findNavController(view).navigate(R.id.action_galleryFragment_to_ViewPager2Fragment,null,extras);
galleryFragment的SharedElement:
setExitSharedElementCallback(new SharedElementCallback() {
@Override
public void onMapSharedElements(List<String> names,Map<String,View> sharedElements) {
View newSharedElement = (View) galleryView.findViewByTag("gallery_image" + activity.getPosition()).getParent();
if (newSharedElement != null) {
sharedElements.put(names.get(0),newSharedElement);
}
}
});
ViewPager2Fragment:
setSharedElementEnterTransition(TransitionInflater.from(getContext()).inflateTransition(android.R.transition.move));
postponeEnterTransition();
setEnterSharedElementCallback(new SharedElementCallback() {
@Override
public void onMapSharedElements(List<String> names,View> sharedElements) {
View currentItemView = viewPager.findViewWithTag("gallery_image" + activity.getPosition());
if (currentItemView != null) {
sharedElements.put(names.get(0),currentItemView);
}
}
});
...
pageAdapter.setonLoadedListener(new pageAdapter.OnLoadListener() {
@Override
public void onComplete(int position) {
startPostponedEnterTransition();
}
});
viewPager.setAdapter(pageAdapter);
viewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
@Override
public void onPageSelected(int position) {
super.onPageSelected(position);
activity.setPosition(position);
}
});
viewPager.setCurrentItem(activity.getPosition(),false);
从galleryFragment到ViewPager2Fragment,回到galleryFragment,而无需更改ViewPager的页面,一切都进行得很好。但是,随着ViewPager的页面更改返回到galleryFragment时,startShareElement消失了,导航是:
- gridItem1-> viewPageItem1
- viewPageItem1-> viewPageItem0
- 返回galleryFragment
- 将outShareElement更改为gridItem0
- gridItem1消失
请参见video
而且,当outShareElement已更改为gridItem0时,如何显示gridItem1?
解决方法
我解决了。这是ChangeTransform的窍门,ChangeTransform将检查inShareElement和outShareElement的parentView转换,然后创建适当的动画。因此,我将两个itemView的parentView调整为正确的大小和位置。
记住: 必须使用setSharedElementEnterTransition()将GalleryFragment和ViewPager2Fragment设置为相同的mSharedElementEnterTransition; 否则,将会发生奇怪的动画。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。