Osmdroid:在点击时显示和隐藏标记描述

时间:2017-12-23 19:16:39

标签: java focus hide overlay osmdroid

我使用Android Studio在Java中编写应用程序。 我已经使用osmdroid显示了一张地图,添加了一些覆盖图来显示特殊位置的标记,并添加了标题&对标记的描述。

现在我显示标题&使用setFocusItemsOnTap方法单击时标记的描述。 我的问题是我无法隐藏标题&第二次点击时标记的描述(如果已经显示)。有没有办法做到这一点?

或者,如果那不可能,有一种方法只显示标题&使用setFocusItemsOnTab方法一次描述一个标记?

public static List<OverlayItem> items = new ArrayList<OverlayItem>();

//[...]

items.add(new OverlayItem("uid1","Title", "Description", new GeoPoint(51.398,6.875)));

//[...]

List<OverlayItem> currentList;
currentList = new ArrayList<OverlayItem>();
        currentList.add(items.get(i));

//[...]

final ItemizedOverlayWithFocus<OverlayItem> mOverlay = new ItemizedOverlayWithFocus<OverlayItem>(this, currentList, new ItemizedIconOverlay.OnItemGestureListener<OverlayItem>() {
                @Override
                public boolean onItemSingleTapUp(final int index, final OverlayItem item) {
                    //here it should decide if the title & description is already shown or not. (true => hide it, false => display it)
                    return true;
                }
                @Override
                public boolean onItemLongPress(final int index, final OverlayItem item) {
                    return false;
                }
        });

mOverlay.setFocusItemsOnTap(true);

我必须使用代码的这些部分,因为我想添加不同的标记,我希望能够集中所有这些标记。此外,我需要能够在运行时将它们添加到动态列表中。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

如果你坚持使用ItemizedIconOverlay,我相信你一次只能有一个弹出窗口。您必须继承ItemizedIconOverlay并覆盖draw方法以支持一次为多个项目渲染弹出窗口。

我认为你在Marker课上会有更好的运气。它已经支持点击关闭功能。同样,一次只能显示一个标记弹出窗口。这可以通过为每个标记提供自己的InfoWindow实例来覆盖。