2010-05-08 52 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; 
    } 
    }