问题:
有没有办法在进行后续 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 缓冲区没有被清除。我这么说的原因有两个:
- 如果我将应用程序置于后台并将其带回前台,则较小的 SupportMapFragment 将不再可见。
- 如果我将较大的 SupportMapFragment 更改为使用 GoogleMaps Android v1 的 MapView,则不存在此问题。这是因为 GoogleMaps Android v1 没有使用 OpenGL。
图片
用户切换到第二个活动后的屏幕截图。请注意,第一个活动的 SupportMapFragment(它是朝向底部的较小的地图条)仍然可见。
在我后台应用程序并将其带回前台后立即截屏。第一个活动的 SupportMapFragment 不再可见(应该是这样)。我假设是因为当应用程序再次被带到前台时,第二个活动称为 glClear()。
任何帮助或建议将不胜感激。谢谢。