使用osmdroid自定义信息泡沫以覆盖项目

Viv*_*ivi 7 android osmdroid android-mapview

我在我的新Android项目上使用osmdroid(因为我希望能够使用离线地图)但是我在定制分配给覆盖项目的信息气泡的外观方面遇到很多困难.

现在,我正在使用ItemizedOverlayWithFocus叠加来显示我的物品; 看着它的代码,我注意到整个onDrawFinished方法都是在方法中绘制的,所以我尝试创建自己的自定义叠加来覆盖这个方法,但这很难得到结果.我希望得到的是这样的事情:

结果

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

我找到了几个类来为Google的MapView(比如Jeff Gilfelt的MapView Balloons)实现这样的东西,但是对于osmdroid来说却没有.

din*_*rma 8

编辑:

  • 这个答案最适合旧谷歌地图apis.在谷歌地图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+"");
            }
        }
}
Run Code Online (Sandbox Code Playgroud)

要设置数据,可以使用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);
        }
}
Run Code Online (Sandbox Code Playgroud)


Dru*_*lic 7

你应该看看这个新的库,OSM奖金包.应该做你想要的.

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