1

问题:

有没有办法在进行后续 glDraw() 调用之前手动清除 SupportMapFragment 绘制的 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)首先显示,其视图成为 FrameLayout 的子项,ID 为 map_area_one。

当用户按下按钮时,我在 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。

图片

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



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

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

4

1 回答 1

1

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

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

我希望这有帮助

于 2013-08-01T13:13:15.313 回答