2011-11-28 36 views
0

我有一個Android MapView,其中我需要在MapView已經處理的地圖上疊加第二層圖層。第二層地圖視圖上的疊加

爲了達到這個目的,我在我的MapView上放置了一個FrameLayout,並在我的佈局中放置了我的針腳作爲ImageViews。

我已經覆蓋了ImageViews的Draw()方法來更新自己的位置時,地圖上移動(使得銷移動與它)是這樣的:

public void draw(Canvas canvas) { 
    if(mCoordinates != null && mapView != null){ 
     LayoutParams mParams = (LayoutParams)this.getLayoutParams(); 
     mapView.getProjection().toPixels(mCoordinates, newPosition); 
     mParams.leftMargin = newPosition.x; 
     mParams.topMargin = newPosition.y; 
    } 
    super.draw(canvas); 
} 

問題:視圖更新太慢,所以當我移動地圖時,引腳似乎落後於它。

的辦法或實施任何見解歡迎

回答

0

最後,我們只是瘋狂的一種方法,每次都會訂購疊加層,以便大型疊加層總是先繪製,而小疊加層則繪製在這些疊加層上。

0

我有一個使用多重疊加來完成這項工作的應用程序。根據需要處理每個疊加層。在處理結束時,函數調用地圖更新例程。這是更新例程的一個框架。

private void updateMap() { 
    GeoPoint geoPoint; 
    overlayList = mapView.getOverlays(); 
    overlayList.clear(); 
    locationOverlay = new MapOverlay(); 
    pushpinOverlay = new MapOverlay(); 
    arrowOverlay = new ArrowOverlay(); 
    tapOverlay = new TapOverlay(); 
    if (hasCurrentPosition) { 
     locationOverlay.setDrawId(R.drawable.man); 
     geoPoint = new GeoPoint(currentLatitudeE6, currentLongitudeE6); 
     locationOverlay.setPointToDraw(geoPoint); 
     if (isFirstFix) { 
      mapController.animateTo(geoPoint); 
      isFirstFix = false; 
     } 
    } 
    if (hasPushpinPosition) { 
     pushpinOverlay.setDrawId(R.drawable.locationmarker); 
     geoPoint = new GeoPoint(pushpinLatitudeE6, pushpinLongitudeE6); 
     pushpinOverlay.setPointToDraw(geoPoint); 
    } 
    calcDistance(); 
    if (findFlag) { 
     calcArrowRotation(); 
    } 
    setStatusMessage(); 
    overlayList.add(locationOverlay); 
    overlayList.add(pushpinOverlay); 
    if (findFlag) { 
     overlayList.add(arrowOverlay); 
    } 
    overlayList.add(tapOverlay); 
    mapView.invalidate(); 
} 

輕拍疊加層是「頂部」疊加層,必須最後添加。因爲它們被指定爲lat和long,所以jpushpin和位置圖像被「鎖定」到地圖上。自來水疊加層返回被點擊的地圖點,而不是屏幕點。箭頭位於屏幕上,只能旋轉,不能水平或垂直移動。此外,用戶可以打開和關閉箭頭疊加層(findFlag是由按鈕切換的布爾值)。

也許你可以使用這個主題的變體作爲分層疊加之一的分項疊加?

+0

謝謝你的回答,但正如我所說我不能使用MapView.getOverlays(),由於在應用 – Arcantos

+0

的具體要求。錯過了... –

相關問題