为什么MapView Overlay的阴影位置错误?

时间:2010-06-24 22:00:36

标签: android

我只是想在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);
    }
}

将Overlay添加到MapView的代码工作正常(我可以看到图标正确的位置)。问题是自动生成的阴影位于错误的位置(左侧图标的宽度,图标的大约一半)。

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:7)

使用你设置的界限 - 0,0,w,h - 原点位于图标的左上角,这很可能是造成阴影计算错误的原因。我不知道这个图像的细节,但如果它是一个男人的图标,你可能希望原点靠近底部中心。 ItemizedOverlay.boundCenterBottom()可以为您执行此操作,或者如果您想要更精细的控件,您可以尝试使用以下代码:

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