在使用osmdroid时,为叠加图层中的条目添加自定义信息气泡以供单击。

8
我在我的新安卓项目中使用osmdroid(因为我想使用离线地图),但我遇到了许多困难来自定义分配给叠加项的信息气泡的外观。

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

The result

你们是如何在项目中得到自定义信息气泡的?我发现有一些类可以实现Google的MapView(例如Jeff Gilfelt的MapView Balloons),但没有osmdroid的。

android-mapviewballoons应该使用几乎相同的API。你没有尝试将它移植到osmdroid吗? - Macarse
我现在正在尝试,但我正在调试(例如,我没有任何触摸事件触发)。但是由于我看到了很多具有漂亮信息气泡的项目,我认为我可能错过了比移植mapviewballoons更容易的东西。 - Vivi
2个回答

8

编辑:

  • 这个答案适用于旧版的谷歌地图API。在谷歌地图V2中,这个功能已经被提供了。

您可以从“BalloonItemizedOverlay.java”方法中获取所选气球代码,如下所示:

您可以从https://github.com/galex/android-mapviewballoons获取代码。

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);
        }
}

7

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接