2010-05-08 50 views
18

我已经扩展叠加并实施draw()以便在地图上绘制一些东西。 当通过mapController.zoomIn()(在doubleTapping地图时调用), 完成缩放时,叠加层会正确绘制到地图上。放大MapView时奇怪的叠加绘制行为

但是,无论何时使用内置缩放控制器放大/缩小,叠加层绘制不正确,需要平移地图才能刷新叠加层。

+0

你(或其他人)找到一个解决的办法?几个月来一直在推动着我。 – 2010-08-07 06:13:43

+2

我发现的解决方法是仅在地图放大500毫秒后才刷新地图,这样叠加层在地图放大后绘制。我用Handler.postDelayed()添加事件。希望这可以帮助 – Itsik 2010-08-07 21:27:42

+0

我一直在使用MapView相当一段时间,没有注意到这个问题。如果可能,请发布您的代码/流程以更好地理解逻辑。 – arcamax 2011-05-30 18:57:53

回答

1
mapView.setBuiltInZoomControls(true); 
    mapView.getController().setZoom(15); 

    controller = mapView.getController(); 




    mapOverlays = mapView.getOverlays(); 

这个。

1

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

我建议如下

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

,而不是使用setZoom使用(XX),请使用zoomIn()/缩小(ZoomOut)(),使变焦更加平滑,这可能有助于使其与多个叠加更好的ESP工作。

1

我在我的地图视图应用程序中发现我想跟踪自己的位置,因此在代码中我将地址设置为当前的GPS位置,然后使用以下代码将地图中心移至该位置发现它奇妙的作品:

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

你可以创造出变焦和动画播放至覆盖点的功能。希望有所帮助。

1

我在地图视图中创建了很多自定义绘图。不幸的是,当缩小时(当它们应该缩小时),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 
    } 
}; 
1
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; 
    } 
    }