【问题标题】:Set minimum zoom level for MapView为 MapView 设置最小缩放级别
【发布时间】:2011-05-07 23:30:22
【问题描述】:

有没有一种方法可以为我的 MapView 设置最小的缩放级别?当缩放级别设置为 1 时,地图看起来非常难看,因为复制了整个世界地图。

我想阻止该缩放级别。理想情况下,无论用户是通过手势还是缩放控件进行缩放,它都可以工作。

【问题讨论】:

    标签: android zooming android-mapview


    【解决方案1】:

    幸运的是,我的 MapView 中有一个叠加层。否则,我想你将不得不创建一个,只是为了这个小功能:-/。我想知道为什么没有其他方法可以更轻松地做到这一点。

    无论如何,您只需要像这样覆盖您的绘制方法:

    @Override
        public void draw(Canvas canvas, MapView mapView, boolean shadow) {
            super.draw(canvas, mapView, shadow);
            if (mapView.getZoomLevel() < 2)
                mapView.getController().setZoom(2);
        }
    

    德国

    【讨论】:

      【解决方案2】:

      通过覆盖*draw() 方法类似于ggomeze 的 答案,但在MapView 中覆盖dispatchDraw() 可能会更好。这样,您可以在图块为空的情况下阻止绘制缩放级别。

      还请注意,此时最好将地图居中,就像您使用触摸手势进行缩放一样手动设置缩小一级可能会导致地图每次都偏离中心(这使得MapView看起来有点狡猾!)。

      @Override
      public void dispatchDraw(Canvas canvas) {
      
          //limit zoom level 
          if(getZoomLevel() == 1){
              getController().setZoom(2);
              getController().setCenter(new GeoPoint(0, 0));
              //dont draw as it will just be blank and then jump
              return;
          }
      
          super.dispatchDraw(canvas);
      }
      

      这可以通过在手势发生时跟踪缩放级别来改进,因此用户在手势时看不到部分缩放到被阻止的最低缩放级别 (1),但我想上面的情况最适合容易多了!

      【讨论】:

        【解决方案3】:

        只需编写 onCreate 如下代码:

        MapController myMC myMapView.getController();
        myMC.setZoom(int value);
        

        【讨论】:

        • 感谢您的快速回答。但是,这不是我的问题的解决方案。使用该代码,您只需设置初始缩放级别。但这并不能避免用户可以缩小,并拥有缩放级别等于 1(两个非洲,两个美洲)的丑陋地图视图
        • 如果您不只是在寻找标准选项,请手动设置限制器:)
        • 为什么要限制用户可以做什么?如果他们想看到整个世界怎么办?
        • 我允许用户看到整个世界(zoom = 2),但不想让他们看到两次(zoom = 1)
        猜你喜欢
        • 1970-01-01
        • 2012-11-30
        • 2013-11-04
        • 1970-01-01
        • 2021-09-24
        • 1970-01-01
        • 2011-07-21
        • 1970-01-01
        相关资源
        最近更新 更多