Подтвердить что ты не робот

Weird Overlay рисует поведение при масштабировании MapView

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

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

4b9b3361

Ответ 2

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

    controller = mapView.getController();




    mapOverlays = mapView.getOverlays();

.

Ответ 3

Я использую зум-контроллеры без проблем. даже нарисовав несколько слоев на карте, и увеличение/уменьшение масштаба не имеет никакого эффекта.

Я предлагаю использовать ниже

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

вместо того, чтобы использовать setZoom (XX), используйте zoomIn()/zoomOut(), что делает масштабирование более плавным, это может помочь улучшить работу с несколькими оверлеями.

Ответ 4

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

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

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

Ответ 5

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

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

Ответ 6

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