【问题标题】:How to clear glSurfaceView that SupportMapFragment is drawing to?如何清除 SupportMapFragment 正在绘制的 glSurfaceView?
【发布时间】:2015-03-02 19:20:47
【问题描述】:

问题:

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

原因:

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

<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 中的第一个 Activity(具有较小的 SupportMapFragment)首先显示,并且它的视图成为带有 id map_area_one 的 FrameLayout 的子级。

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

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

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

  1. 如果我将应用程序置于后台并将其带回前台,则较小的 SupportMapFragment 将不再可见。
  2. 如果我将较大的 SupportMapFragment 更改为使用 GoogleMaps Android v1 的 MapView,则不会出现此问题。这是因为 GoogleMaps Android v1 没有使用 OpenGL。

图片

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



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

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

【问题讨论】:

  • 我也很想得到这个答案,切换 MapFragments 时也会发生这种情况。
  • 你最终找到解决这个问题的方法了吗?

标签: android glsurfaceview supportmapfragment mapfragment


【解决方案1】:

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

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

希望对你有帮助

【讨论】:

  • 嘿,非常感谢,这对我有用。我仅在 args.putParcelable(MAP_OPTIONS, options);其中 MAP_OPTIONS 表示从 SDK SupportMapFragment 类代码中提取的“MapOptions”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-24
  • 1970-01-01
  • 1970-01-01
  • 2021-10-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多