在一个活动

时间:2017-02-17 15:46:07

标签: android android-fragments osmdroid

我想在一个活动中并排使用两个Map Fragments,每个Map片段都有一个不同的片段。左侧地图计划显示特定区域的概览,右侧地图放大到特定点。

我遇到的问题是,只有第一个(左)地图片段正确显示,第二个(右)一个显示世界地图: Screenshot

缩放不适用于正确的地图。

以下是我使用的代码的一部分:

private void initializeMap()
{       
    MapTileProviderBasic tileProviderOSM = new MapTileProviderBasic(getApplicationContext());
    ITileSource tileSourceOSM = new XYTileSource("OpenFireMap", null, 1, 18, 256, ".png", new String[]{"http://openfiremap.org/hytiles/"});
    tileProviderOSM.setTileSource(tileSourceOSM);
    TilesOverlay tilesOverlayOSM = new TilesOverlay(tileProviderOSM, this.getBaseContext());
    tilesOverlayOSM.setLoadingBackgroundColor(Color.TRANSPARENT);

    OsmFragment frag = (OsmFragment) getFragmentManager().findFragmentById(R.id.osmMap);
    osmMap = frag.getMap();
    osmMap.setMultiTouchControls(true);
    osmMap.getOverlays().add(tilesOverlayOSM);

    MapTileProviderBasic tileProviderOSMDetail = new MapTileProviderBasic(getApplicationContext());
    ITileSource tileSourceOSMDetail = new XYTileSource("OpenFireMap", null, 1, 18, 256, ".png", new String[]{"http://openfiremap.org/hytiles/"});
    tileProviderOSMDetail.setTileSource(tileSourceOSMDetail);
    TilesOverlay tilesOverlayOSMDetail = new TilesOverlay(tileProviderOSMDetail, this.getBaseContext());
    tilesOverlayOSMDetail.setLoadingBackgroundColor(Color.TRANSPARENT);

    OsmFragment fragDetail = (OsmFragment) getFragmentManager().findFragmentById(R.id.osmMapDetail);
    osmMapDetail = fragDetail.getMap();
    osmMapDetail.setMultiTouchControls(true);
    osmMapDetail.getOverlays().add(tilesOverlayOSMDetail);
}

如果我将其中一个片段更改为GoogleMaps片段,则会正确加载osmdroid地图。

为什么会发生这种情况以及如何解决这个问题?我使用gradle的最新osmdroid版本(v5.6.4)

提前致谢。

编辑: 我改变了变量declation,但它仍然没有工作。

2 个答案:

答案 0 :(得分:0)

您必须为不同的地图视图创建单独的TilesOverlay。目前,您在两个片段中使用单个叠加层,这不起作用。

答案 1 :(得分:0)

所以我找到了解决方案。问题是,MapView在片段内,片段是一个自定义类,其中包含硬编码ID和布局。对我有用的解决方案是复制自定义片段类并编辑ID和布局。然后在MainActivity中我不得不将可变声明和演员从OsmFragment更改为OsmFragmentDetail 现在两张地图都显示了想要的内容。