如何清除SupportMapFragment正在绘制的glSurfaceView?

时间:2013-06-04 16:11:23

标签: android glsurfaceview supportmapfragment mapfragment

问题:

有没有办法手动清除SupportMapFragment在进行后续glDraw()调用之前绘制的OpenGL缓冲区?

原因:

我有一个ActivityGroup,它包含两个不同的嵌入式活动(在给定时间只能在屏幕上显示其中一个)。这是它的布局代码片段。

<RelativeLayout
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
 android:layout_below="@+id/main_header"
 android:background="#313131" >

    <FrameLayout
     android:id="@+id/map_area_one"
     android:layout_width="fill_parent"
     android:layout_height="fill_parent"
     android:padding="5dp" />
    <FrameLayout
     android:id="@+id/map_area_two"
     android:layout_width="fill_parent"
     android:layout_height="fill_parent" />
</RelativeLayout>              

我的ActivityGroup中的两个活动的视图都包含一个SupportMapFragment。 ActivityGroup内的第一个活动(具有较小的SupportMapFragment)首先显示,其视图成为具有id map_area_one的FrameLayout的子项。

当用户按下按钮时,我在ActivityGroup内启动第二个活动(使用较大的SupportMapFragment),其视图将成为具有id map_area_one的FrameLayout的子视图。然后我隐藏了第一个活动的视图。

我遇到的问题是,即使第一个活动的视图不再可见,我仍然可以看到第一个活动的较小的SupportMapFragment(即使我无法与它交互)。我在下面附上了图片。

我得出的结论是,这是因为两个SupportMapFragments都使用相同的OpenGL SurfaceView绘制地图。我很确定由于某种原因,当我隐藏第一个活动时,SupportMapFragment正在绘制的openGL缓冲区未被清除。我说这有两个原因:

  1. 如果我将应用程序设置为背景并将其带回前景,则不再显示较小的SupportMapFragment。
  2. 如果我将较大的SupportMapFragment更改为使用GoogleMaps Android v1的MapView,则此问题不存在。这是因为GoogleMaps Android v1没有使用OpenGL。
  3. 图片

    用户切换到第二个活动后的屏幕截图。请注意,第一个活动的SupportMapFragment(底部较小的地图条)仍然可见



    在我背景应用程序并将其带回前台后的屏幕截图。第一个活动的SupportMapFragment不再可见(它应该是怎样的)。我假设因为当应用程序再次被带到前台时,第二个活动称为glClear()。

    任何帮助或建议将不胜感激。 感谢。

1 个答案:

答案 0 :(得分:1)

好吧,我至少可以通过在SupportMapFragment的初始时传递某些选项来委托解决问题,关于zIndex:

GoogleMapOptions options = new GoogleMapOptions();
options.zOrderOnTop(true);
fragmentMap = SupportMapFragment.newInstance(options);

我希望这会有所帮助