Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在MapView中缩放时奇怪的叠加绘制行为_Android_Overlay_Zooming_Android Mapview - Fatal编程技术网

Android 在MapView中缩放时奇怪的叠加绘制行为

Android 在MapView中缩放时奇怪的叠加绘制行为,android,overlay,zooming,android-mapview,Android,Overlay,Zooming,Android Mapview,为了在地图上绘制一些东西,我扩展了覆盖并实现了draw()。 通过mapController.zoomIn()进行缩放时(双击地图时调用), 覆盖图正确地绘制在地图上 但是,每当我使用内置的缩放控制器进行放大/缩小时,覆盖图绘制不正确,需要平移地图才能刷新覆盖图。您可以使用缩放控制器解决此问题。。 (例如:zoomView=(LinearLayout)mapView.GetZoomControl();) 查看此链接 这个。我一直在使用缩放控制器,一点问题都没有。 即使在地图上绘制多层并放大/缩

为了在地图上绘制一些东西,我扩展了覆盖并实现了
draw()
。 通过
mapController.zoomIn()
进行缩放时(双击地图时调用), 覆盖图正确地绘制在地图上


但是,每当我使用内置的缩放控制器进行放大/缩小时,覆盖图绘制不正确,需要平移地图才能刷新覆盖图。

您可以使用缩放控制器解决此问题。。 (例如:zoomView=(LinearLayout)mapView.GetZoomControl();)

查看此链接


这个。

我一直在使用缩放控制器,一点问题都没有。 即使在地图上绘制多层并放大/缩小,也不会产生任何不良影响

我建议如下使用

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

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

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

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

您可以创建一个函数,用于缩放和设置覆盖点的动画。希望能有所帮助。

我在地图视图中创建了许多自定义绘图。不幸的是,当缩小时(当它们本应缩小时),可拖动项会扩大。为了解决这个问题,我在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
    }
};

你(或其他人)找到了解决办法吗?这几个月来一直让我焦头烂额。我找到的解决办法是在地图缩放500毫秒后才刷新地图,这样在地图已经缩放后才绘制覆盖图。我使用Handler.postdayed()添加事件。希望此帮助我已经使用MapView很长时间了,没有注意到这个问题。如果可能,请发布您的代码/流程,以便更好地理解逻辑。
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
    }
};
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;
    }
    }