Weird Overlay рисует поведение при масштабировании MapView
Я расширил Overlay и реализовал draw()
, чтобы нарисовать некоторые вещи на карте.
Когда масштабирование выполняется с помощью mapController.zoomIn()
(называемого при двойном перетаскивании карты),
наложение правильно наносится на карту.
Но всякий раз, когда я увеличиваю/уменьшаю масштаб с помощью встроенного контроллера масштабирования, наложение не нарисовано должным образом и для панорамирования карты требуется панорамирование карты.
Ответы
Ответ 1
Вы можете использовать контроллер масштабирования и избавиться от этой проблемы.
(например: zoomView = (LinearLayout) mapView.getZoomControls();)
проверьте эту ссылку
http://developer.android.com/reference/android/widget/ZoomButtonsController.html
Ответ 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;
}
}