题:

有没有一种方法可以手动清除SupportMapFragment绘制到的OpenGL缓冲区,然后再进行随后的glDraw()调用?

原因:

我有一个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缓冲区。我这么说有两个原因:


如果我将应用程序设为背景,并将其放回前台,则较小的SupportMapFragment将不再可见。
如果我将较大的SupportMapFragment更改为使用GoogleMaps Android v1的MapView,则不会出现此问题。这是因为GoogleMaps Android v1未使用OpenGL。


图片

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



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


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

最佳答案

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

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


我希望这有帮助

关于android - 如何清除SupportMapFragment绘制到的glSurfaceView?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16922642/

10-09 12:27