我扩展了 Overlay 并实现draw()
了在地图上绘制一些东西。当缩放完成时mapController.zoomIn()
(在双击地图时调用),覆盖被正确地绘制到地图上。
但是,每当我使用内置缩放控制器放大/缩小时,叠加层都不会正确绘制,需要平移地图才能刷新叠加层。
我扩展了 Overlay 并实现draw()
了在地图上绘制一些东西。当缩放完成时mapController.zoomIn()
(在双击地图时调用),覆盖被正确地绘制到地图上。
但是,每当我使用内置缩放控制器放大/缩小时,叠加层都不会正确绘制,需要平移地图才能刷新叠加层。
您可以使用缩放控制器并摆脱这个问题..(例如: zoomView = (LinearLayout) mapView.getZoomControls(); )
用这个链接检查
http://developer.android.com/reference/android/widget/ZoomButtonsController.html
我在地图视图中创建了许多自定义可绘制对象。不幸的是,drawable 在缩小时会扩大(当它们应该缩小时)。为了解决这个问题,我监控了用户在可运行文件中放大或缩小的情况。如果缩放发生变化,我会重新绘制地图。这是我的代码:
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
}
};
我一直在使用变焦控制器,一点问题都没有。即使在地图上绘制了多层并放大/缩小也没有任何不良影响。
我建议如下使用
mapController = mapView.getController();
mapController.zoomIn();// or .zoomOut()
而不是使用 setZoom(XX) 请使用 zoomIn() / zoomOut() 这使得缩放更平滑,这可能有助于使其更好地工作,尤其是多个叠加层。
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;
}
}
mapView.setBuiltInZoomControls(true);
mapView.getController().setZoom(15);
controller = mapView.getController();
mapOverlays = mapView.getOverlays();
这个。
我在我的 mapview 应用程序中发现我想跟踪自己的位置,所以在代码中我将地理点设置为我当前的 gps 位置,然后我使用以下代码将地图中心移动到该点并发现它可以工作奇妙的是:
MapController mc = mapView.getController();
mc.animateTo(point);
您可以创建一个缩放和动画到覆盖点的函数。希望有帮助。