我想创建弹出菜单,其中包括:选择地图类型,选择地图上绘制的城墙的形状。
我的问题:
当我改变形状时,如何让我的地图不再被加载。
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
switch(item.getItemId()){
case R.id.mediewal:
shape = new PolygonOptions();
mMap.addPolygon(shape);
break;
case R.id.swedish:
shape = new PolygonOptions()
.add(new LatLng(53.426685, 14.565516),
new LatLng(53.427519, 14.565268),
................................
new LatLng(53.427003, 14.565636))
.strokeColor(0xB3A60307)
.fillColor(0xB3670000)
.strokeWidth(8)
.geodesic(true);
mMap.addPolygon(shape);
shape = new PolygonOptions()
.add(new LatLng(53.420158, 14.557578),
new LatLng(53.420285, 14.557832),
................................
new LatLng(53.419972, 14.557818))
.strokeColor(0xB3A60307)
.fillColor(0xB3670000)
.strokeWidth(8)
.geodesic(true);
mMap.addPolygon(shape);
break;
case R.id.prussian:
shape = new PolygonOptions();
mMap.addPolygon(shape);
break;
case R.id.none:
shape = new PolygonOptions();
mMap.addPolygon(shape);
break;
}
switch(item.getItemId()){
case R.id.normal_map:
mapType = GoogleMap.MAP_TYPE_NORMAL;
break;
case R.id.satellite_map:
mapType = GoogleMap.MAP_TYPE_SATELLITE;
break;
case R.id.terrain_map:
mapType = GoogleMap.MAP_TYPE_TERRAIN;
break;
case R.id.hybrid_map:
mapType = GoogleMap.MAP_TYPE_HYBRID;
break;
}
mMap.setMapType(mapType);
return super.onOptionsItemSelected(item);
}
当然我只在这里放了一个测试形状。目前它的工作方式如下:我可以选择maptype并选择形状,但是没有办法以另一种方式清理形状,而不是去菜单再去地图。
非常感谢任何帮助
答案 0 :(得分:0)
通常为了避免反复加载地图我已经在mapTypes的switch case中的每个地图类型下移动了mMap.setMapType(mapType);
。从Return
电话中移除了这个。
要清理形状,我调用mMap.clear()
,从地图中删除所有形状和标记。它对每个人来说都不是完美的解决方案,但就我而言,这已经足够了。
我想要清理一个我们应该调用的形状(带复选框):
if(item.isChecked()){
item.setChecked(false);
polygon2.remove()
;}
else{
item.setChecked(true);
polygon2 = mMap.addPolygon(shape2);
}
break;
请记住初始化形状,例如private Polygon polygon2;