MapActivity - 如何限制缩放级别?

时间:2012-07-27 19:45:43

标签: java android android-mapview

我在HelloMapView Tutorial和许多StackOverflow资源之后使用Pins实现了MapActivity

出于我的应用的目的,我想限制缩放级别的最小值和最大值。实际上我想避免在我的MapView上使用android:clickable="true"

我找不到如何做到这一点。

  • 有可能吗?
  • 有人知道怎么做吗?
  • 是否有内置函数可以覆盖onZoomChanged(),而我没有看到?

的AndroidManifest.xml

<uses-sdk
    android:maxSdkVersion="16"
    android:minSdkVersion="7"
    android:targetSdkVersion="15" />

MyMapActivity.java

// Here is my MapView
mMapView = (MapView) findViewById(R.id.game_map);
mMapView.setBuiltInZoomControls(false);
mMapView.setSatellite(true);
mMapController = mMapView.getController();
mMapController.setZoom(CONST_MAP_ZOOM);
mMapController.setCenter(new GeoPoint(48856700, 2351000));
mMapController.animateTo(new GeoPoint(48856700, 2351000));

但是当我用手指时,我可以缩小直到看到整个星球。

我希望限制缩放级别。

2 个答案:

答案 0 :(得分:1)

MapView确实有onSizeChanged

参见https://developers.google.com/maps/documentation/android/reference/com/google/android/maps/MapView#onSizeChanged(int,int,int,int)

也许您可以听取它然后调用getZoomLevel()并查看它是否在您可接受的范围内并从那里进行更改。

或者更好的是,您可以覆盖onDraw并始终在那里进行检查。 Set minimum zoom level for MapView

答案 1 :(得分:0)

我找到了出路。

我在MapView上禁用了多次触摸:

<com.google.android.maps.MapView
    android:id="@+id/game_map"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:apiKey="@string/google_maps_api_key"
    android:clickable="true" />

然后我隐藏缩放控件:

mMapView = (MapView) findViewById(R.id.game_map);
mMapView.setBuiltInZoomControls(false);

然后我实现了自己的缩放控件。