我正在尝试使用Google Maps Android SDK构建带有自定义图块的地图。我已经检出了TileOverlayDemoActivity Github存储库的android-samples。
根据缩放级别为0的documentation,将请求一张图像,缩放级别为1时,总共需要4张图像,依此类推。目前,我面临的问题是,加载地图后,TileProvider#getTitle
会立即以3级缩放级别被调用,而我无法缩小。即使显示缩放控件,“-”也被禁用。
我尝试过的
我认为它可能与Camera
有关,因此我尝试调用以下命令
map.moveCamera(CameraUpdateFactory.zoomTo(0.0f));
不幸的是,这没有任何作用。以下内容也一样
map.setMinZoomPreference(0);
目前,我不知道可能是什么问题。
按照我的代码。基本上与我刚刚将
UrlTileProvider
更改为链接的演示活动中的链接相同。@Override
public void onMapReady(GoogleMap map) {
map.setMapType(GoogleMap.MAP_TYPE_NONE);
map.setMinZoomPreference(0);
map.getUiSettings().setZoomControlsEnabled(true);
map.moveCamera(CameraUpdateFactory.zoomTo(0.0f));
TileProvider tileProvider = new TileProvider() {
@Override
public Tile getTile(int x, int y, int zoom) {
String name = "tile_" + Integer.toString(zoom) + "_" + Integer.toString(x) + "_" + Integer.toString(y);
Resources resources = getResources();
final int resourceId = resources.getIdentifier(name, "drawable", getPackageName());
Drawable d = getResources().getDrawable(resourceId);
Bitmap bitmap = ((BitmapDrawable) d).getBitmap();
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
byte[] bitmapdata = stream.toByteArray();
return new Tile(256, 256, bitmapdata);
}
};
mapTiles = map.addTileOverlay(new TileOverlayOptions().tileProvider(tileProvider));
}
也许值得一提的是
map.getCameraPosition()
返回的内容:CameraPosition{target=lat/lng: (0.0,0.0), zoom=2.0, tilt=0.0, bearing=0.0}
tl; dr
如何将地图设置为缩放级别0?
编辑
根据评论和答案,我尝试激活
Lite Mode
并通过XML设置缩放级别:<fragment
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"
map:cameraZoom="1"
map:mapType="normal"
class="com.google.android.gms.maps.SupportMapFragment" />
不幸的是没有任何效果。仍然会在缩放级别3时开始请求。
最佳答案
似乎无法将缩放级别设置为0,因为最小缩放级别为1 from documentation:
以下列表显示了您可以达到的详细程度
期望在每个缩放级别看到:
1: World
5: Landmass/continent
10: City
15: Streets
20: Buildings
也来自文档:
注意:由于屏幕尺寸和密度,某些设备可能不支持
最低缩放级别。使用
GoogleMap.getMinimumZoomLevel()
获取地图的最小缩放级别。如果您需要显示
在视口中的整个世界中,最好使用Lite Mode。
因此,使用Lite Mode在视口中显示整个世界。