Android Google API V2启用/禁用TileProvider
我的问题很简单,我想在Google Maps API v2上启用和禁用TileUrlProvider 我的做法是:Android Google API V2启用/禁用TileProvider,android,google-maps,android-maps-v2,Android,Google Maps,Android Maps V2,我的问题很简单,我想在Google Maps API v2上启用和禁用TileUrlProvider 我的做法是: public class BackTileSelectorActivity extends FragmentActivity { private GoogleMap mMap; private TileOverlayOptions osmTileProviderOptions; private TileOverlayOptions moonTileProv
public class BackTileSelectorActivity extends FragmentActivity {
private GoogleMap mMap;
private TileOverlayOptions osmTileProviderOptions;
private TileOverlayOptions moonTileProviderOptions;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_back_tile_selector);
setUpMapIfNeeded();
}
@Override
protected void onResume() {
super.onResume();
setUpMapIfNeeded();
}
private void setUpMapIfNeeded() {
// Do a null check to confirm that we have not already instantiated the map.
if (mMap == null) {
// Try to obtain the map from the SupportMapFragment.
mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map))
.getMap();
// Check if we were successful in obtaining the map.
if (mMap != null) {
setUpMap();
}
}
}
private void setUpMap() {
mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
mMap.animateCamera(
CameraUpdateFactory.newLatLngZoom(
new LatLng(47.224217, -1.631409),
16
)
);
osmTileProviderOptions = new TileOverlayOptions().tileProvider(new OSMTileProvider());
osmTileProviderOptions.visible(false);
mMap.addTileOverlay(osmTileProviderOptions);
moonTileProviderOptions = new TileOverlayOptions().tileProvider(new MoonTileProvider());
moonTileProviderOptions.visible(false);
mMap.addTileOverlay(moonTileProviderOptions);
}
public void setGoogleMapNormalEnabled(View v) {
osmTileProviderOptions.visible(false);
moonTileProviderOptions.visible(false);
mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
}
public void setOSMMapEnabled(View v) {
osmTileProviderOptions.visible(true);
moonTileProviderOptions.visible(false);
mMap.setMapType(GoogleMap.MAP_TYPE_NONE);
}
public void setMoonMapEnabled(View v) {
osmTileProviderOptions.visible(false);
moonTileProviderOptions.visible(true);
mMap.setMapType(GoogleMap.MAP_TYPE_NONE);
}
public void setGoogleMapHybridEnabled(View v) {
osmTileProviderOptions.visible(false);
moonTileProviderOptions.visible(false);
mMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
}
public void setGoogleMapSatelliteEnabled(View v) {
osmTileProviderOptions.visible(false);
moonTileProviderOptions.visible(false);
mMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE);
}
public void setGoogleMapTerrainEnabled(View v) {
osmTileProviderOptions.visible(false);
moonTileProviderOptions.visible(false);
mMap.setMapType(GoogleMap.MAP_TYPE_TERRAIN);
}
}
互动程序提供程序如下所示:
public class MoonTileProvider extends UrlTileProvider {
private static final int TILE_WIDTH = 256;
private static final int TILE_HEIGHT = 256;
private static final String MOON_MAP_URL_FORMAT =
"http://mw1.google.com/mw-planetary/lunar/lunarmaps_v1/clem_bw/%d/%d/%d.jpg";
public MoonTileProvider() {
super(TILE_WIDTH, TILE_HEIGHT);
}
@Override
public URL getTileUrl(int x, int y, int zoom) {
// The moon tile coordinate system is reversed. This is not normal.
int reversedY = (1 << zoom) - y - 1;
String s = String.format(Locale.US, MOON_MAP_URL_FORMAT, zoom, x, reversedY);
URL url = null;
try {
url = new URL(s);
} catch (MalformedURLException e) {
throw new AssertionError(e);
}
return url;
}
}
private GoogleMap mMap;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.google_map_api_layout);
setUpMapIfNeeded();
}
@Override
protected void onResume() {
super.onResume();
setUpMapIfNeeded();
}
private void setUpMapIfNeeded() {
// Do a null check to confirm that we have not already instantiated the map.
if (mMap == null) {
// Try to obtain the map from the SupportMapFragment.
mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map))
.getMap();
// Check if we were successful in obtaining the map.
if (mMap != null) {
setUpMap();
}
}
}
private void setUpMap() {
mMap.setMapType(GoogleMap.MAP_TYPE_NONE);
mMap.animateCamera(
CameraUpdateFactory.newLatLngZoom(
new LatLng(47.224217, -1.631409),
16
)
);
TileProvider tileProvider = new OSMTileProvider();
mMap.addTileOverlay(new TileOverlayOptions().tileProvider(tileProvider));
}
tileProvider在如下调用时工作正常:
public class MoonTileProvider extends UrlTileProvider {
private static final int TILE_WIDTH = 256;
private static final int TILE_HEIGHT = 256;
private static final String MOON_MAP_URL_FORMAT =
"http://mw1.google.com/mw-planetary/lunar/lunarmaps_v1/clem_bw/%d/%d/%d.jpg";
public MoonTileProvider() {
super(TILE_WIDTH, TILE_HEIGHT);
}
@Override
public URL getTileUrl(int x, int y, int zoom) {
// The moon tile coordinate system is reversed. This is not normal.
int reversedY = (1 << zoom) - y - 1;
String s = String.format(Locale.US, MOON_MAP_URL_FORMAT, zoom, x, reversedY);
URL url = null;
try {
url = new URL(s);
} catch (MalformedURLException e) {
throw new AssertionError(e);
}
return url;
}
}
private GoogleMap mMap;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.google_map_api_layout);
setUpMapIfNeeded();
}
@Override
protected void onResume() {
super.onResume();
setUpMapIfNeeded();
}
private void setUpMapIfNeeded() {
// Do a null check to confirm that we have not already instantiated the map.
if (mMap == null) {
// Try to obtain the map from the SupportMapFragment.
mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map))
.getMap();
// Check if we were successful in obtaining the map.
if (mMap != null) {
setUpMap();
}
}
}
private void setUpMap() {
mMap.setMapType(GoogleMap.MAP_TYPE_NONE);
mMap.animateCamera(
CameraUpdateFactory.newLatLngZoom(
new LatLng(47.224217, -1.631409),
16
)
);
TileProvider tileProvider = new OSMTileProvider();
mMap.addTileOverlay(new TileOverlayOptions().tileProvider(tileProvider));
}
但我可以告诉你,我的瓷砖从未载入地图。
其他谷歌地图瓷砖工作良好
有什么建议吗?我也有同样的问题。。事实证明,
.visible()
函数除了返回对象外,什么都不做,只是改变了可见性。
因此,如果您必须更改可见性,我建议您在地图对象上执行
.clear()
,然后重新添加覆盖。如果有其他解决方案,请告诉我。您可以保留对TileProvider的引用,然后在需要时调用.remove()将其从地图中删除:
TileOverlay mTileOverlay;
如前所述添加互动程序:
TileProvider tileProvider = new OSMTileProvider();
mTileOverlay = mMap.addTileOverlay(new TileOverlayOptions().tileProvider(tileProvider));
按如下方式移除它:
if (null != mTileOverlay) {
mTileOverlay.remove();
}
您可以在
onCreate
中将这两个平铺集添加为不可见和不可见。您是否调用过某个方法来更改其可见性?请参阅activity类中的setMoonMapEnabled(视图v),此方法是从视图中调用的。