问题:
有没有办法在 SupportMapFragment 进行后续 glDraw() 调用之前手动清除 SupportMapFragment 绘制到的 OpenGL 缓冲区?
原因:
我有一个 ActivityGroup,它包含两个不同的嵌入式 Activity (在给定时间只有其中一个可以显示在屏幕上)。这是它的布局代码 fragment 。
<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 中两个 Activity 的 View 都包含一个 SupportMapFragment。 ActivityGroup 中的第一个 Activity (具有较小的 SupportMapFragment)首先显示,它的 View 成为 FrameLayout 的子元素,id 为 map_area_one。
当用户按下按钮时,我在 ActivityGroup 中启动第二个 Activity (具有较大的 SupportMapFragment),它的 View 成为 FrameLayout 的子元素,其 ID 为 map_area_one。然后我隐藏第一个 Activity 的 View 。
我遇到的问题是,即使第一个 Activity 的 View 不再可见,我仍然可以看到第一个 Activity 的较小 SupportMapFragment(即使我无法与其交互)。我在下面附上了图片。
我得出的结论是,这是因为两个 SupportMapFragments 使用相同的 OpenGL SurfaceView 绘制 map 。我很确定,出于某种原因,当我隐藏第一个 Activity 时,SupportMapFragment 正在绘制的 openGL 缓冲区没有被清除。我这样说有两个原因:
- 如果我将应用置于后台并将其返回前台,则较小的 SupportMapFragment 将不再可见。
- 如果我将较大的 SupportMapFragment 更改为使用 GoogleMaps Android v1 的 MapView,则不会出现此问题。这是因为 GoogleMaps Android v1 没有使用 OpenGL。
图片
用户切换到第二个 Activity 后的屏幕截图。请注意,第一个 Activity 的 SupportMapFragment(这是底部较小的 map 条)仍然可见。
在我将应用程序置于后台并将其带回前台后立即截图。第一个 Activity 的 SupportMapFragment 不再可见(应该是这样)。我假设是因为当应用程序再次被带到前台时,第二个 Activity 调用了 glClear() 。
如有任何帮助或建议,我们将不胜感激。 谢谢。
最佳答案
好吧,我至少可以通过在 SupportMapFragment 的初始时间传递某些选项来委托(delegate)这个问题,关于 zIndex:
GoogleMapOptions options = new GoogleMapOptions();
options.zOrderOnTop(true);
fragmentMap = SupportMapFragment.newInstance(options);
希望对你有帮助
关于android - 如何清除 SupportMapFragment 绘制到的 glSurfaceView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16922642/