使用 osmdroid 为覆盖项目点击自定义信息气泡

发布于 2025-01-07 11:16:14 字数 696 浏览 4 评论 0原文

我在我的新 Android 项目上使用 osmdroid(因为我希望能够使用离线地图),但在自定义分配给覆盖项目的信息气泡的外观时遇到了许多困难。

现在,我正在使用 ItemizedOverlayWithFocus 叠加层来显示我的项目;查看 其代码,我注意到整个事情都是在 onDrawFinished 方法中绘制的,因此我尝试创建自己的自定义覆盖层来覆盖此方法但这很难得到结果。我希望得到的是这样的东西:

The result

你们是如何设法获得自定义信息气泡的你的项目?

我找到了一些类来为 Google 的 MapView 实现这样的功能(例如 Jeff Gilfelt 的 MapView Balloons),但是osmdroid 没有任何内容。

I'm using osmdroid on my new Android project (since I want to be able to use offline maps) but I encounter many difficulties to customize the look 'n feel of the information bubble assigned to an overlay item.

Right now, I'm using an ItemizedOverlayWithFocus overlay to display my items; looking at its code, I noticed the whole thing was drawn in the onDrawFinished method so I tried to create my own custom overlay to override this method but this is pretty difficult to get a result. What I would love to get is something just like this :

The result

How did you guys managed to get a custom information bubble on your projects?

I found a few classes to implement such a thing for Google's MapView (like Jeff Gilfelt's MapView Balloons) but nothing for osmdroid.

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

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

发布评论

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

评论(2

懷念過去 2025-01-14 11:16:14

编辑:

  • 这个答案最适合旧的谷歌地图API。在谷歌地图V2中这个
    事情已经给定了。

您可以从https://github.com/galex/android-mapviewballoons

您可以通过“BalloonItemizedOverlay.java”的方法获取选定的气球,如下所示

private void hideOtherBalloons(List<Overlay> overlays) {
        for(int i=0; i<overlays.size();i++ ){
            if (overlays.get(i) instanceof BalloonItemizedOverlay<?> && overlays.get(i) != this) {
                ((BalloonItemizedOverlay<?>) overlays.get(i)).hideBalloon();
            }else{
                BalloonOverlayView.SELECTED_BALLOON = i;
                Log.i(i+" : Baloon Open", BalloonOverlayView.SELECTED_BALLOON+"");
            }
        }
}

要设置数据,您可以使用 BalloonOverlayView.java 文件的 setBalloonData 方法,如下所示:

protected void setBalloonData(Item item, ViewGroup parent) {
        if (item.getTitle() != null) {
            title.setVisibility(VISIBLE);
            title.setText(item.getTitle());
        } else {
            title.setText("");
            title.setVisibility(GONE);
        }
        if (item.getSnippet() != null) {
            snippet.setVisibility(VISIBLE);
            snippet.setText(item.getSnippet());
        } else {
            snippet.setText("");
            snippet.setVisibility(GONE);
        }
}

EDIT:

  • This answer was best for older google map apis. In google Map V2 this
    thing is already given.

You can get the code from https://github.com/galex/android-mapviewballoons

you can get selected balloon from the method of "BalloonItemizedOverlay.java" as follow

private void hideOtherBalloons(List<Overlay> overlays) {
        for(int i=0; i<overlays.size();i++ ){
            if (overlays.get(i) instanceof BalloonItemizedOverlay<?> && overlays.get(i) != this) {
                ((BalloonItemizedOverlay<?>) overlays.get(i)).hideBalloon();
            }else{
                BalloonOverlayView.SELECTED_BALLOON = i;
                Log.i(i+" : Baloon Open", BalloonOverlayView.SELECTED_BALLOON+"");
            }
        }
}

To set the data you can use setBalloonData method of BalloonOverlayView.java file as follow:

protected void setBalloonData(Item item, ViewGroup parent) {
        if (item.getTitle() != null) {
            title.setVisibility(VISIBLE);
            title.setText(item.getTitle());
        } else {
            title.setText("");
            title.setVisibility(GONE);
        }
        if (item.getSnippet() != null) {
            snippet.setVisibility(VISIBLE);
            snippet.setText(item.getSnippet());
        } else {
            snippet.setText("");
            snippet.setVisibility(GONE);
        }
}
猫卆 2025-01-14 11:16:14

您应该查看这个新库,OSM 奖励包。应该完全按照你的意愿去做。

http://code.google.com/p/osmbonuspack/

You should check out this new library, OSM bonus pack. Should do exactly what you want.

http://code.google.com/p/osmbonuspack/

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