2010-05-08 3 views
18

Я расширил Overlay и реализовал draw(), чтобы нарисовать некоторые вещи на карте. При масштабировании выполняется через mapController.zoomIn() (называемый при двойном перетаскивании карты), Наложение наносится правильно на карту.Weird Overlay поведение рисования при масштабировании MapView

Но всякий раз, когда я увеличиваю или уменьшаю масштаб с помощью встроенного контроллера масштабирования, наложение не нарисовано должным образом, и для того, чтобы обновить оверлей, требуется панорамирование карты.

+0

ли вы (или кто-либо еще) найти решение этой проблемы? Это заставляло меня затихать месяцами. –

+2

Обходной путь, который я нашел, состоял в том, чтобы обновить карту только после 500 мс, чтобы карта была увеличена, таким образом наложение рисуется после того, как карта уже была увеличена. Я добавляю событие с помощью Handler.postDelayed(). Надеюсь, это поможет – Itsik

+0

Я использую MapView довольно давно, не заметил этой проблемы. Если возможно, отправьте свой код/​​поток, чтобы лучше понять логику. – arcamax

ответ

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(), которая делает масштабирование более гладкой, это может помочь сделать его работу лучше особ с несколькими накладками.

1

Я нашел в своем приложении mapview, что хочу отслеживать свою собственную позицию, поэтому в коде я установил геосоединение в текущую позицию gps, затем я использую следующий код для перемещения центра карты к этой точке и что это прекрасно работает:

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

Вы можете создать функцию, которая масштабирует и оживляет точку наложения. Надеюсь, это поможет.

1

В моем представлении карты я создал множество пользовательских чертежей. К сожалению, чертежи расширялись при уменьшении (когда они должны были уменьшиться). Чтобы обойти это, я следил за тем, чтобы пользователь увеличивал или уменьшал скорость выполнения. Если масштаб изменился, я перерисовал карту. Вот мой код:

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; 
    } 
    } 
Смежные вопросы