Lollipop为mapView共享元素转换?

时间:2014-12-02 00:50:03

标签: android android-animation android-mapview android-5.0-lollipop

我有一个占据屏幕一小部分的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>

2 个答案:

答案 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回调结束时恢复它即可。