SitesOverlay 中的重复标记

发布于 2025-01-08 14:40:37 字数 1753 浏览 1 评论 0原文

我再次寻求比我更好的人的智慧...

我正在开发一个 Android 应用程序,它使用 Google 地图,并根据从网络读取的文件中的状态信息以编程方式在地图上放置标记。

我遇到的问题是每个标记都绘制了两次。一旦位于正确位置,一次稍低于(第二个标记的顶线与第一个标记的底部对齐)。

private class SitesOverlay extends ItemizedOverlay<OverlayItem> {
    private List<OverlayItem> items=new ArrayList<OverlayItem>();
    private Drawable marker=null;

    public SitesOverlay(Drawable marker) {
        super(marker);
        this.marker=marker;

        try {
            data = getData();
        } catch (MalformedURLException e) {
            //
        }

        if (!data.equals("")) {
            String[] msg = data.split(NEWLINE);

            for (Integer i = 0; i < msg.length; i++) {
                items.add(new OverlayItem(
                        getPoint(lat.get(suburb), lng.get(suburb)),
                        msg[i], msg[i]));
            }
        }

        populate();
        map.postInvalidate();
    }

    @Override
    protected OverlayItem createItem(int i) {
        return(items.get(i));
    }

    @Override
    public void draw(Canvas canvas, MapView mapView,
                boolean shadow) {
        super.draw(canvas, mapView, false);
        //boundCenterBottom(marker);
    }

    @Override
    protected boolean onTap(int i) {
        Toast.makeText(getBaseContext(),
            items.get(i).getSnippet(),
            Toast.LENGTH_LONG).show();
        map.getController().setZoom(16 + zoomModifier);
        return(true);
    }

    @Override
    public int size() {
        return(items.size());
    }
}

但是,只有当我在绘图函数中取消注释boundCenterBottom(marker) 时,第二个标记才会变得明显。

几天来我一直在尝试弄清楚第二个标记的放置位置。有人能指出我正确的方向吗?

谢谢

编辑:我忘了提及,如果我触摸屏幕,绑定CenterBottom的标记就会消失。

Once again I seek the wisdom of my betters...

I'm working on an Android app that uses Google Maps and programmatically puts markers on the map based on status info from a file read from the web.

The problem I have is that each marker is drawn twice. Once in the right spot and once a little below (the top line of the second marker is in line with the bottom of the first marker).

private class SitesOverlay extends ItemizedOverlay<OverlayItem> {
    private List<OverlayItem> items=new ArrayList<OverlayItem>();
    private Drawable marker=null;

    public SitesOverlay(Drawable marker) {
        super(marker);
        this.marker=marker;

        try {
            data = getData();
        } catch (MalformedURLException e) {
            //
        }

        if (!data.equals("")) {
            String[] msg = data.split(NEWLINE);

            for (Integer i = 0; i < msg.length; i++) {
                items.add(new OverlayItem(
                        getPoint(lat.get(suburb), lng.get(suburb)),
                        msg[i], msg[i]));
            }
        }

        populate();
        map.postInvalidate();
    }

    @Override
    protected OverlayItem createItem(int i) {
        return(items.get(i));
    }

    @Override
    public void draw(Canvas canvas, MapView mapView,
                boolean shadow) {
        super.draw(canvas, mapView, false);
        //boundCenterBottom(marker);
    }

    @Override
    protected boolean onTap(int i) {
        Toast.makeText(getBaseContext(),
            items.get(i).getSnippet(),
            Toast.LENGTH_LONG).show();
        map.getController().setZoom(16 + zoomModifier);
        return(true);
    }

    @Override
    public int size() {
        return(items.size());
    }
}

However, the second marker only becomes evident if I uncomment the boundCenterBottom(marker) in the draw function.

I've been trying to workout what is placing the second marker for days. Can anyone point me in the right direction?

Thanks

EDIT: I forgot to mention that if I touch the screen the marker that is not boundCenterBottom disappears.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

欢烬 2025-01-15 14:40:37

好吧,终于知道出了什么问题了。

更改

public SitesOverlay(Drawable marker) {
    super(marker);
    this.marker=marker;

public SitesOverlay(Drawable marker) {
    super(marker);
    boundCenterBottom(marker);

Ok, finally worked out what was wrong.

Change

public SitesOverlay(Drawable marker) {
    super(marker);
    this.marker=marker;

to

public SitesOverlay(Drawable marker) {
    super(marker);
    boundCenterBottom(marker);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文