【问题标题】:Weird Overlay draw behaviour when zooming in the MapView放大 MapView 时出现奇怪的叠加绘制行为
【发布时间】:2010-05-08 07:47:47
【问题描述】:

我扩展了 Overlay 并实现了draw(),以便在地图上绘制一些东西。 通过mapController.zoomIn()(双击地图时调用)进行缩放时, 叠加层已正确绘制到地图上。

但每当我使用内置缩放控制器放大/缩小时,叠加层都无法正确绘制,需要平移地图才能刷新叠加层。

【问题讨论】:

  • 您(或其他任何人)找到解决方案了吗?几个月来一直让我发狂。
  • 我发现的解决方法是仅在地图缩放 500 毫秒后刷新地图,这样在地图已经缩放后才会绘制叠加层。我使用 Handler.postDelayed() 添加事件。希望这会有所帮助
  • 我使用 MapView 已经有一段时间了,没有注意到这个问题。如果可能,请发布您的代码/流程以更好地理解逻辑。

标签: android overlay zooming android-mapview


【解决方案1】:

您可以使用缩放控制器并摆脱这个问题.. (例如:zoomView = (LinearLayout) mapView.getZoomControls();)

查看此链接

http://developer.android.com/reference/android/widget/ZoomButtonsController.html

【讨论】:

    【解决方案2】:

    我一直在使用缩放控制器,完全没有问题。 即使在地图上绘制了多层并放大/缩小也没有任何不良影响。

    我建议如下使用

    mapController = mapView.getController();
    mapController.zoomIn();// or .zoomOut()
    

    请不要使用 setZoom(XX),而是使用 zoomIn() / zoomOut(),这可以使缩放更平滑,这可能有助于使其更好地工作,尤其是多个叠加层。

    【讨论】:

      【解决方案3】:

      我在我的 mapview 应用程序中发现我想跟踪自己的位置,所以在代码中我将地理点设置为我当前的 gps 位置,然后我使用以下代码将地图中心移动到该点并找到它工作得很好:

      MapController mc = mapView.getController(); 
                     mc.animateTo(point);
      

      您可以创建一个缩放和动画到覆盖点的函数。希望对您有所帮助。

      【讨论】:

        【解决方案4】:

        我在地图视图中创建了许多自定义可绘制对象。不幸的是,drawable 在缩小时会扩大(当它们应该缩小时)。为了解决这个问题,我监控了用户在可运行文件中放大或缩小的情况。如果缩放发生变化,我会重新绘制地图。这是我的代码:

        private Runnable zoomChecker = new Runnable()
        {
            public void run()
            {
                //check for updates
                if((mLastUpdate>UPDATE_INTERVAL)&&(!DISPLAY_RED_CIRCLE)&&(!DISPLAY_ROUTE_LAYOUT)){
                    updateRouteInformation();
                    mLastUpdate = 0; 
                }else{
                    mLastUpdate += 200;
                }
                //check for zoom level changes
                int testZoomLevel = mMapView.getZoomLevel();
                if((testZoomLevel!=mZoomLevel)&&(DISPLAY_RED_CIRCLE)){
                    //set that user is zooming 
                    mStillZooming = true;
        
                    //remove overlays and clear map
                    removeOverlayItems();       
                    mMapView.invalidate();
        
                    //set zoom level as same
                    mZoomLevel = testZoomLevel;
                }
                if((testZoomLevel==mZoomLevel)&&(mStillZooming)){
                    displayDriverBoundaries(MAP_DRIVER);
                }
                handler.removeCallbacks(zoomChecker); // remove the old callback
                handler.postDelayed(zoomChecker, zoomCheckingDelay); // register a new one
            }
        };
        

        【讨论】:

          【解决方案5】:
          public class MyMap_MapControllerActivity extends MapActivity {
          
              private MapView mapView;
              //private MapController mapController;
               MapView.LayoutParams lp;
               int y = 10;
                  int x = 10;
          
              /** Called when the activity is first created. */
              @Override
              public void onCreate(Bundle savedInstanceState) {
                  super.onCreate(savedInstanceState);
                  setContentView(R.layout.main);
                  mapView = (MapView)findViewById(R.id.map_view);
                  mapView.setSatellite(true);
                  mapView.setStreetView(true);
                  mapView.setTraffic(true);
          
          
          
              GeoPoint center = mapView.getMapCenter();
              int latSpan = mapView.getLatitudeSpan();
              int longSpan = mapView.getLongitudeSpan();
          
          
          
          
              lp = new MapView.LayoutParams(MapView.LayoutParams.WRAP_CONTENT,
              MapView.LayoutParams.WRAP_CONTENT,
              x, y,
              MapView.LayoutParams.TOP_LEFT);
              View zoomControls = mapView.getZoomControls();
              mapView.addView(zoomControls, lp);
              mapView.displayZoomControls(true);
              }
          
          
          
              @Override
              protected boolean isRouteDisplayed() {
                  // TODO Auto-generated method stub
                  return false;
              }
              }
          

          【讨论】:

            【解决方案6】:
                mapView.setBuiltInZoomControls(true);
                mapView.getController().setZoom(15);
            
                controller = mapView.getController();
            
            
            
            
                mapOverlays = mapView.getOverlays();
            

            这个。

            【讨论】:

              猜你喜欢
              • 2012-06-16
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多