Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/214.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 为什么“地图视图”覆盖的阴影位于错误的位置?_Android - Fatal编程技术网

Android 为什么“地图视图”覆盖的阴影位于错误的位置?

Android 为什么“地图视图”覆盖的阴影位于错误的位置?,android,Android,我只是想在地图视图的中心显示一个男人的图标,他的脚下有一个圆圈。这是我的覆盖代码: public class CenterOverlay extends Overlay { private Drawable d; public CenterOverlay(Drawable drawable) { final int w = drawable.getIntrinsicWidth(); final int h = drawable.ge

我只是想在地图视图的中心显示一个男人的图标,他的脚下有一个圆圈。这是我的覆盖代码:

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的代码运行良好(我可以在它应该位于的位置看到图标)。问题是,自动生成的阴影位于错误的位置(图标左侧的宽度,图标的一半)


提前感谢您的帮助

对于您正在设置的边界--0,0,w,h--原点位于图标的左上角,这很可能是导致阴影计算不正确的原因。我不知道这张图片的细节,但如果它是一个男人的图标,你可能希望原点靠近底部中心。ItemizeOverlay.boundCenterBottom()可以为您做到这一点,或者如果您想要更细粒度的控制,您可以尝试使用以下代码:

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

对不起,我花了这么长时间才回答,去度假了。无论如何,这是可行的——尽管我自己通过转换为ItemizedOverlay.boundCenterBottom()、记录它设置的值、返回到我的覆盖并输入这些值来解决这一问题:P我对边界框的工作原理了解得很差。