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

Ben*_*our 6 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

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

在此先感谢您的帮助!

小智 7

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

drawable.setBounds(-width / 2, -height, width - (width / 2), 0)
Run Code Online (Sandbox Code Playgroud)