我想在一个活动中并排使用两个Map Fragments,每个Map片段都有一个不同的片段。左侧地图计划显示特定区域的概览,右侧地图放大到特定点。
我遇到的问题是,只有第一个(左)地图片段正确显示,第二个(右)一个显示世界地图:
缩放不适用于正确的地图。
以下是我使用的代码的一部分:
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,但它仍然没有工作。
答案 0 :(得分:0)
您必须为不同的地图视图创建单独的TilesOverlay。目前,您在两个片段中使用单个叠加层,这不起作用。
答案 1 :(得分:0)
所以我找到了解决方案。问题是,MapView在片段内,片段是一个自定义类,其中包含硬编码ID和布局。对我有用的解决方案是复制自定义片段类并编辑ID和布局。然后在MainActivity中我不得不将可变声明和演员从OsmFragment更改为OsmFragmentDetail 现在两张地图都显示了想要的内容。