2010-05-08 45 views
18

Tôi đã mở rộng Lớp phủ và triển khai draw() để vẽ một số nội dung trên bản đồ. Khi phóng to được thực hiện thông qua mapController.zoomIn() (được gọi khi doubleTapping bản đồ), lớp phủ được vẽ đúng trên bản đồ.Hành vi vẽ Lớp phủ Weird khi phóng to trong MapView

Nhưng bất cứ khi nào tôi phóng to/thu nhỏ bằng bộ điều khiển thu phóng tích hợp, lớp phủ không được vẽ đúng cách và việc quét bản đồ là cần thiết để làm mới lớp phủ.

+0

Bạn có (hoặc bất cứ ai khác) tìm thấy một giải pháp cho điều này? Nó đã được lái xe tôi batty trong nhiều tháng. –

+2

Cách giải quyết mà tôi tìm thấy là làm mới bản đồ chỉ sau 500ms mà bản đồ đã được phóng to, theo cách này lớp phủ được vẽ sau khi bản đồ đã được phóng to. Tôi thêm sự kiện với Handler.postDelayed(). Hy vọng điều này sẽ giúp – Itsik

+0

Tôi đã sử dụng MapView khá lâu, không nhận thấy vấn đề này. Nếu có thể, vui lòng đăng mã/luồng của bạn để hiểu logic tốt hơn. – arcamax

Trả lời

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

    controller = mapView.getController(); 




    mapOverlays = mapView.getOverlays(); 

điều này.

1

Tôi đã sử dụng bộ điều khiển thu phóng mà không gặp vấn đề gì cả. thậm chí đã vẽ nhiều lớp trên bản đồ và phóng to/thu nhỏ không có tác dụng xấu chút nào.

Tôi đề nghị để sử dụng như sau

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

thay vì sử dụng setZoom (XX) xin vui lòng sử dụng zoomIn()/zoomOut() mà làm cho phóng to mượt mà hơn, điều này có thể giúp làm cho nó làm việc tốt hơn đặc biệt với nhiều lớp phủ.

1

Tôi đã tìm thấy trong ứng dụng bản đồ của mình mà tôi muốn theo dõi vị trí của riêng mình, vì vậy trong mã tôi đặt một geopoint vào vị trí gps hiện tại của mình, sau đó tôi sử dụng mã sau để di chuyển trung tâm bản đồ đến điểm đó và thấy rằng nó hoạt động tuyệt vời:

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

Bạn có thể tạo một chức năng phóng to và hoạt hình đến điểm phủ. Hy vọng rằng sẽ giúp.

1

Tôi đã tạo nhiều bản vẽ tùy chỉnh trong chế độ xem bản đồ của mình. Thật không may các drawables mở rộng khi thu nhỏ (khi họ nên đã thu nhỏ). Để giải quyết vấn đề này, tôi theo dõi người dùng phóng to hoặc thu nhỏ trong một lần chạy. Nếu thu phóng thay đổi, tôi đã vẽ lại bản đồ. Đây là mã của tôi:

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 
    } 
}; 
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; 
    } 
    } 
Các vấn đề liên quan