2010-06-24 52 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