2010-05-08 18 views
18

He extendido Overlay e implementado draw() para dibujar algunas cosas en el mapa. Cuando se hace zoom a través de mapController.zoomIn() (llamado al hacer doble clic en el mapa), la superposición se dibuja correctamente en el mapa.Weird Overlay draw behavior when zooming in the MapView

Pero cada vez que acerco/alejé el zoom con el controlador de zoom incorporado, la superposición no se dibuja correctamente y se necesita una panorámica del mapa para actualizar la superposición.

+0

¿Usted (o cualquier otro) encontrar una solución a esto? Me ha estado volviendo loco por meses. –

+2

La solución alternativa que encontré fue actualizar el mapa solo después de 500 ms de que el mapa se amplió, de esta forma se dibuja la superposición después de que el mapa ya se haya ampliado. Agrego el evento con Handler.postDelayed(). Espero que esto ayude – Itsik

+0

He estado usando MapView durante bastante tiempo, sin haber notado este problema. Si es posible, publique su código/flujo para comprender mejor la lógica. – arcamax

Respuesta

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

    controller = mapView.getController(); 




    mapOverlays = mapView.getOverlays(); 

esto.

1

He estado usando controles de zoom sin ningún problema. incluso haber dibujado varias capas en el mapa y hacer zoom in/out no tiene ningún efecto negativo.

Es mejor utilizar la siguiente

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

en lugar de utilizar setZoom (XX) por favor utilice zoomIn()/zoomOut() que hace que el zoom suave, esto puede ayudar a hacer que funcione mejor ESP con múltiples superposiciones.

1

He encontrado en mi aplicación mapview que quiero rastrear mi propia posición, así que en el código establezco un punto geográfico a mi posición gps actual, luego uso el siguiente código para mover el centro del mapa a ese punto y encontró que funciona maravillosamente:

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

Puede crear una función que se acerca y anima al punto de superposición. Espero que ayude.

1

Creé muchos objetos personalizados en mi vista del mapa. Lamentablemente, los objetos desplegables se expandieron cuando se redujeron (cuando deberían haberse reducido). Para evitar esto, monitoreé al usuario acercándose o alejándose en un ejecutable. Si el zoom cambió, rediseñé el mapa. Aquí está mi código:

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; 
    } 
    }