TileOverlay#getTile从缩放级别3开始

时间:2018-10-07 13:03:40

标签: android google-maps google-maps-android-api-2

我正在尝试使用Google Maps Android SDK构建带有自定义图块的地图。我已经检出了TileOverlayDemoActivity Github存储库中的android-samples

根据documentation,缩放级别为0,将请求一张图像,缩放级别为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级缩放比例开始请求。

1 个答案:

答案 0 :(得分:1)

似乎无法将缩放级别设置为0,因为最小缩放级别为1 from documentation

  

以下列表显示了您可以了解的大概详细程度   希望在每个缩放级别都能看到:

1: World
5: Landmass/continent
10: City
15: Streets
20: Buildings

也来自文档:

  

注意:由于屏幕尺寸和密度,某些设备可能不支持   最低缩放级别。使用GoogleMap.getMinimumZoomLevel()获取   地图的最小缩放级别。如果您需要显示   整个视口中,最好使用Lite Mode

因此,使用Lite Mode在视口中显示整个世界。