在放大MapView时,奇怪的叠加绘制行为

时间:2010-05-08 07:47:48

标签: android overlay zoom android-mapview

我已经扩展了Overlay并实现了draw()以便在地图上绘制一些内容。 通过mapController.zoomIn()进行缩放时(双击地图时调用), 叠加层正确地绘制在地图上。

但是无论何时使用内置的变焦控制器进行放大/缩小,都无法正确绘制叠加层,并且需要平移地图才能刷新叠加层。

6 个答案:

答案 0 :(得分:1)

你可以使用变焦控制器并摆脱这个问题.. (例如:zoomView =(LinearLayout)mapView.getZoomControls();)

查看此链接

http://developer.android.com/reference/android/widget/ZoomButtonsController.html

答案 1 :(得分:1)

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

    controller = mapView.getController();




    mapOverlays = mapView.getOverlays();

此。

答案 2 :(得分:1)

我一直在使用变焦控制器,没有任何问题。 即使在地图上绘制了多个图层,放大/缩小也没有任何不良影响。

我建议使用如下

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

而不是使用setZoom(XX),请使用zoomIn()/ zoomOut(),这使得缩放更平滑,这可能有助于使其更好地工作,尤其是多个叠加。

答案 3 :(得分:1)

我在我的mapview应用程序中发现我想跟踪自己的位置,所以在代码中我将一个地理位置设置为我当前的gps位置,然后我使用以下代码将地图中心移动到该点并找到它运作得非常好:

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

您可以创建一个缩放和动画到叠加点的功能。希望有所帮助。

答案 4 :(得分:1)

我在地图视图中创建了很多自定义绘图。不幸的是,当缩小时(当它们应该缩小时),drawables会扩展。为了解决这个问题,我监控用户在runnable中放大或缩小。如果缩放发生变化,我会重新绘制地图。这是我的代码:

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

答案 5 :(得分: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;
    }
    }