我有一个占据屏幕一小部分的mapView,当触摸时会打开全屏视图。
我通过在两个片段之间切换来实现这一目标。
我很想使用新的Lollipop动画框架将小mapView无缝扩展到更大的mapView(从Fragment1到Fragment2)。
不幸的是,我无法让它工作 - 我想知道是否有人能够使用mapView来处理新的动画框架。
我的代码:
@SuppressLint("NewApi")
public void launchMapFullscreenFragment(Fragment previousFragment, MapView mapView)
{
// Launch fragment to view Google Maps
FragmentMapFullScreen fragment = new FragmentMapFullScreen();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
previousFragment.setSharedElementReturnTransition(TransitionInflater.from(this).inflateTransition(R.transition.change_image_transform));
previousFragment.setExitTransition(TransitionInflater.from(this).inflateTransition(android.R.transition.explode));
// Create new fragment to add (Fragment B)
fragment.setSharedElementEnterTransition(TransitionInflater.from(this).inflateTransition(R.transition.change_image_transform));
fragment.setEnterTransition(TransitionInflater.from(this).inflateTransition(android.R.transition.explode));
// Add Fragment B
FragmentTransaction ft = getSupportFragmentManager().beginTransaction()
.replace(R.id.content_frame, fragment)
.addToBackStack("transaction")
.addSharedElement(mapView, "MyTransition");
ft.commit();
}
else
{
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.setCustomAnimations(R.anim.slide_in_left, R.anim.abc_fade_out);
ft.replace(R.id.content_frame, fragment, FRAGMENT_MAP_FULLSCREEN);
ft.addToBackStack(null);
ft.commit();
}
}
change_image_transform.xml
<?xml version="1.0" encoding="utf-8"?>
<transitionSet xmlns:android="http://schemas.android.com/apk/res/android">
<changeTransform />
</transitionSet>
答案 0 :(得分:2)
我没有明确使用MapView,但是文档将它显示为FrameLayout,它应该可以工作。您尚未显示两个布局文件。 ChangeTransform将根据源片段中的值为目标片段中的缩放,平移和旋转设置动画。如果您没有在源或目标Fragment的MapViews中设置scaleX或scaleY,则ChangeTransform将不会执行任何特殊操作。
如果MapViews正在改变大小(不仅仅是缩放),您应该将ChangeBounds Transition与ChangeTransform一起添加。
另一个问题可能是您传递给addSharedElement的参数。名称“MyTransition”应与目标片段(FragmentMapFullScreen)中的MapView的transitionName匹配。所以你的MapView应该是这样的:
<MapView android:transitionName="MyTransition" ... />
如果您怀疑MapView是罪魁祸首(可能是,根据其实现情况而定),您可以尝试使用TextView来查看是否按预期进行了转换。
答案 1 :(得分:0)
我已经在另一个活动(而不是MapFragment)中使用MapView完成了此操作。只需推迟过渡并在onMapReady回调结束时恢复它即可。