Android Google Maps v2 - 为我的位置设置缩放级别

125

通过新的Google Maps API v2,可以更改“我的位置”所在的缩放级别吗?

如果设置GoogleMap.setEnableMyLocation(true);,则会在地图上获得一个按钮以查找您的位置。

如果单击它,则地图将带您到您的位置并将其缩放到某个级别。我可以将此缩放级别更改为较小或较大吗?


1
你有没有想法关于我的位置按钮缩放级别?我想要那个值。 - Prashanth Debbadwar
13个回答

249

默认的myLocation Marker不太可能在点击时更改它。但是,如果您想要应用程序在找到您的位置后自动缩放到您的位置,我建议您查看我的答案这个问题

请注意,我提供的答案不会缩放,但是如果您将onLocationChanged方法修改为以下内容,您可以选择任何缩放级别:

@Override
public void onLocationChanged(Location location) {
    if( mListener != null ) {
        mListener.onLocationChanged( location );

        //Move the camera to the user's location and zoom in!
        mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(location.getLatitude(), location.getLongitude()), 12.0f));
    }
}

onMapReady()中使用animateCamera()时要小心,这可能会导致地图卡顿且带有淡黄色背景。对于地图初始化,最好使用moveCamera()(相同的签名)。 - QuarK

164

您还可以使用:

mMap.animateCamera( CameraUpdateFactory.zoomTo( 17.0f ) );    

只需将缩放值更改为介于最小值2.0和最大值21.0之间的任何所需值。

API警告称,并非所有位置都具有在或接近最大缩放级别时的瓷砖。

有关CameraUpdateFactory中可用的缩放方法的更多信息,请参见此处


1
默认缩放级别是多少? - IgorGanapolsky
1
14是默认的缩放级别。 - vin shaba
你为什么选择 17.0f - IgorGanapolsky

33

使用新版的GoogleMaps SDK可以获取位置信息:

mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(chLocation,14));

2
newLatLngZoom()和zoom()之间有区别吗?很多其他答案都提到了这一点。从终端用户的角度来看,这两者看起来是相同的。 - portfoliobuilder

24

以下是大致缩放级别及其作用:

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

所以你可以这样做,例如缩放到街道级别(请注意下面的“15f”是街道级别):

 override fun onMapReady(googleMap: GoogleMap?) {
    googleMap?.mapType = GoogleMap.MAP_TYPE_NORMAL
    googleMap?.addMarker(MarkerOptions()
            .position(LatLng(37.4233438, -122.0728817))
            .title("cool place")

            .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_ROSE)))

    googleMap?.animateCamera(CameraUpdateFactory.newLatLngZoom(LatLng(37.4233438, -122.0728817), 15f))

注:请注意不同位置可能具有不同的最大缩放级别。如果您想获取最大或最小缩放级别,请尝试使用googleMap.maxZoomLevel


15

这是比HeatfanJohn提供的稍微不同的解决方案,其中我根据当前缩放级别相对地改变了缩放比例:

// Zoom out just a little
map.animateCamera(CameraUpdateFactory.zoomTo(map.getCameraPosition().zoom - 0.5f));

14
在onMapReady()方法中,将缩放级别更改为所需的任何值。
float zoomLevel = (float) 18.0;
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, zoomLevel));

2

在maps_activity.xml中,您只需要编写一行代码。

map:cameraZoom="13"

我希望这能解决你的问题...


2
您可以使用

标签

    CameraUpdate center = CameraUpdateFactory.newLatLng(new LatLng(location.getLatitude(), location.getLongitude()));
    CameraUpdate zoom = CameraUpdateFactory.zoomTo(12);

1

mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(currentPlace,15)); 这不会产生动画效果。


1

我最近也有同样的问题……不知道为什么上述提到的setmaxzoom或map:cameraZoom="13"都没有起作用。 后来我发现我使用的依赖项已经过时了,请确保你的Google Maps依赖项是正确的,这是最新的,请使用它。

compile 'com.google.android.gms:play-services:11.8.0' 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接