2010-06-24 50 views
5

我只是想在地圖視圖的中心顯示一個人腳下的圖標。這裏是我的疊加代碼:爲什麼我的MapView覆蓋圖的陰影在錯誤的地方?

public class CenterOverlay extends Overlay 
{ 
    private Drawable d; 

    public CenterOverlay(Drawable drawable) 
    { 
     final int w = drawable.getIntrinsicWidth(); 
     final int h = drawable.getIntrinsicHeight(); 
     drawable.setBounds(0, 0, w, h); 
     this.d = drawable; 
    } 

    @Override 
    public void draw(Canvas canvas, MapView mapView, boolean shadow) 
    { 
     final int mapCenterX = mapView.getWidth()/2; 
     final int mapCenterY = mapView.getHeight()/2; 
     final int x = mapCenterX - d.getIntrinsicWidth()/2; 
     final int y = mapCenterY - d.getIntrinsicHeight(); 
     drawAt(canvas, d, x, y, shadow); 
    } 
} 

的代碼添加到的MapView工作正常疊加(我能看到它應該是圖標右側)。問題在於自動生成的陰影出現在錯誤的位置(圖標左側的寬度以及圖標的一半左右)。

在此先感謝您的幫助!

回答

7

隨着界限的設置 - 0,0,w,h - 原點位於圖標的左上角,這很可能是導致不正確的陰影計算的原因。我不知道這個圖像的細節,但如果它是一個男人的圖標,你可能想要靠近底部中心的原點。 ItemizedOverlay.boundCenterBottom()能爲你做到這一點,或者如果你想更細粒度的控制,你可以嘗試用代碼打這樣的:

drawable.setBounds(-width/2, -height, width - (width/2), 0) 
+0

對不起,我花了這麼長時間來回答,去度假。無論如何,這工作 - 雖然我自己通過轉換爲ItemizedOverlay.boundCenterBottom()來解決它,記錄它設置的值,回到我的覆蓋並輸入這些值。 :P我對邊界框的工作原理很不瞭解。 – 2010-07-13 17:22:52