2010-05-08 17 views
18

Mam przedłużoną nakładkę i zaimplementowano draw() w celu narysowania niektórych elementów na mapie. Podczas powiększania za pomocą mapController.zoomIn() (wywoływanego po dwukrotnym kliknięciu mapy), nakładka jest prawidłowo narysowana na mapie.Nakładanie rysowania dziwnych nakładek podczas powiększania widoku mapy

Ale gdy powiększam/pomniejszam za pomocą wbudowanego kontrolera zoomu, nakładka nie jest prawidłowo rysowana, a przesuwanie mapy jest potrzebne, aby odświeżyć nakładkę.

+0

Czy (lub ktokolwiek inny) znaleźć rozwiązanie tego? Od wielu miesięcy doprowadza mnie do szału. –

+2

Okazało się, że odświeżam mapę dopiero po 500 ms, że mapa została powiększona, w ten sposób nakładka zostanie narysowana po powiększeniu mapy. Dodaję wydarzenie za pomocą Handler.postDelayed(). Mam nadzieję, że to pomoże – Itsik

+0

Używam MapView przez jakiś czas, nie zauważyłem tego problemu. Jeśli to możliwe, opublikuj swój kod/przepływ, aby lepiej zrozumieć logikę. – arcamax

Odpowiedz

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

    controller = mapView.getController(); 




    mapOverlays = mapView.getOverlays(); 

to.

1

Używam kontrolerów zoomu bez problemu. Nawet rysowanie wielu warstw na mapie i powiększanie/pomniejszanie nie ma żadnego złego efektu.

Proponuję użyć jako poniżej

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

zamiast korzystania setzoom (XX) skorzystaj zoomin()/zoomout(), która sprawia, że ​​powiększanie gładsza, może to sprawić, że działają lepiej esp z wielu nakładek.

1

Znalazłem w mojej aplikacji mapview, że chcę śledzić moją własną pozycję, więc w kodzie ustawiłem punkt odniesienia do mojej aktualnej pozycji GPS, następnie używam następującego kodu, aby przesunąć centrum mapy do tego punktu i okazało się, że działa to cudownie:

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

Można utworzyć funkcję, która przybliża i animuje punkt nałożenia. Nadzieja, która pomaga.

1

W widoku mapy utworzyłem wiele niestandardowych rysunków. Niestety rysunki powiększyły się po pomniejszeniu (kiedy powinny się skurczyć). Aby obejść ten problem, monitorowałem, jak użytkownik powiększa lub pomniejsza działanie. Jeśli zoom się zmienił, zmieniłem mapę. Tu jest mój kodu:

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; 
    } 
    } 
Powiązane problemy