【问题标题】:zoom level listener in google maps v2 in androidandroid中谷歌地图v2中的缩放级别监听器
【发布时间】:2012-12-20 14:04:17
【问题描述】:

我正在开发一个应该使用 Google Maps v2 的 Android 应用。 现在我一直在寻找地图的缩放级别何时发生变化。 任何人都可以帮助我吗?在此先感谢。

【问题讨论】:

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


    【解决方案1】:

    如果您正在寻找如何确定缩放级别是否与之前的缩放级别相比发生了变化,以下是我的建议:

    定义一个实例变量来跟踪之前的缩放级别:

    //Initialize to a non-valid zoom value
    private float previousZoomLevel = -1.0f;
    

    另外,定义一个实例变量,让您知道地图是否正在缩放:

    private boolean isZooming = false;
    

    当你设置你的 GoogleMap 实例时,给它一个 OnCameraChangeListener...

    //mMap is an instance of GoogleMap
    mMap.setOnCameraChangeListener(getCameraChangeListener());
    

    现在,定义将确定缩放级别是否已更改的 OnCameraChangeListener:

    public OnCameraChangeListener getCameraChangeListener()
    {
        return new OnCameraChangeListener() 
        {
            @Override
            public void onCameraChange(CameraPosition position) 
            {
                Log.d("Zoom", "Zoom: " + position.zoom);
    
                if(previousZoomLevel != position.zoom)
                {
                    isZooming = true;
                }
    
                previousZoomLevel = position.zoom;
            }
        };
    }
    

    现在,您可以检查 isZooming 的值以了解您是否正在更改缩放级别。

    一定要设置

    isZooming = false;
    

    在您完成任何依赖于知道地图是否正在缩放的​​操作之后。

    【讨论】:

    • 也可以完美地用作拖动监听器。正是我想要通过到地图中心的距离来过滤标记视图的内容。谢谢!
    • 现已弃用。
    【解决方案2】:

    由于之前的答案基于OnCameraChangeListener,即deprecated,因此此答案基于摄像头OnCameraMoveListener

    在此示例中,当用户更改缩放(使用控件或手指和缩放)时,我将更改我的 Map Type

    如果zoom level 更改为以上 18.0,则地图类型更改为MAP_TYPE_HYBRIB
    如果zoom level 更改为下面 18.0,则地图类型更改为MAP_TYPE_NORMAL

    googleMap.setOnCameraMoveListener(new GoogleMap.OnCameraMoveListener() {
        @Override
        public void onCameraMove() {
            CameraPosition cameraPosition = googleMap.getCameraPosition();
            if(cameraPosition.zoom > 18.0) {
                googleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
            } else {
                googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
            }
        }
    });
    

    【讨论】:

    • 不错!比 OnCameraChangeListener 干净得多。更改地图类型的有趣想法。
    • 注意:每次缩放事件都会触发多次此回调
    • @SomeoneSomewhere 是的。当用户放大时,缩放的每个“阶段”都会有一个触发器。放大/缩小的速度越慢,触发监听器的次数就越多。放大/缩小的速度越快,触发的次数就越少。
    【解决方案3】:

    创建一个实现of OnCameraChangeListener,并传递它的一个实例to setOnCameraChangeListener() of your GoogleMap。每当用户更改缩放、中心或倾斜时,都应该使用 onCameraChange() 调用您的侦听器。您从传递的CameraPosition 对象中找出新的缩放级别。

    【讨论】:

    • setOnCameraChangeListener 现已弃用
    • @CommonsWare 如果我只想检测 google map 上的 zoom onDoubleTap 怎么办??
    • @NirmalPrajapat:我不知道,抱歉。
    【解决方案4】:

    您还可以覆盖GoogleMap.OnCameraMoveStartedListener 并使用GogleMap.setOnCameraMoveStartedListener 方法注册它:

    googleMap.setOnCameraMoveStartedListener { reason ->
       when (reason) {
          GoogleMap.OnCameraMoveStartedListener.REASON_GESTURE -> {
             //handle this state
          }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-08
      • 2014-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多