8

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

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

结果

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

我找到了一些类来为 Google 的 MapView 实现这样的事情(比如Jeff Gilfelt 的 MapView Balloons),但对于 osmdroid 却没有。

4

2 回答 2

8

编辑:

  • 这个答案最适合较旧的谷歌地图 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);
        }
}
于 2012-02-27T08:14:34.520 回答
7

您应该查看这个新库 OSM 奖励包。应该做你想做的。

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

于 2012-08-14T22:05:35.417 回答