【问题标题】:Hiding / showing markers: OSMDroid / OpenMaps隐藏/显示标记:OSMDroid / OpenMaps
【发布时间】:2015-01-27 01:50:53
【问题描述】:

我有一个应用程序,它根据连接状态使用 googlemaps 或 openMaps(离线)。

在每种情况下都有标记,用于地点或兴趣点或……我希望用户可以显示或隐藏某些类别的标记。

When using google maps I have a menu and in the action bar when some item is selected it toggles between showing or hiding the markers from the correpondent category;至于使用isVisible(); 可以轻松完美地工作的谷歌地图

至于 osmdroid,我在文档中没有找到任何与 isVisible() 等效的东西,也没有找到任何 show()hide() 方法。所以我尝试使用somemarkers.getAlpha()somemarkers.setAlpha() 作为解决方法,在01 alpha 值之间切换。

没有发生错误,但标记的可见性保持不变,不切换,或者仅当我在操作图标上点击 10 或 20 次时随机。

在日志中我得到"InputEventReceiver: Attempted to finish an input event but the input event receiver has already been disposed",在我看来这就是原因。

但是如何避免这种情况呢?

奇巧、索尼Xperia Z

【问题讨论】:

    标签: osmdroid markers


    【解决方案1】:

    我的做法有点不同。

    1. 扩展 ItemizedIconOverlay
    2. 添加为 mapView 的叠加层
    3. 使用 removeAllItems 或 removeItem 隐藏标记
    4. 通过将标记添加到逐项叠加列表中来显示标记

    通过扩展 ItemizedIconOverlay 创建一个新的 Overlay 类。 注意:WaypointOverlayItem 扩展了 OverlayItem。 {这是您的自定义叠加模型类}

            public class NavigatorItemizedOverlay extends ItemizedIconOverlay<WaypointOverlayItem> {
    
            private Context mContext;
    
            public NavigatorItemizedOverlay(final Context context, final List<WaypointOverlayItem> aList) {
                super(context, aList, new OnItemGestureListener<WaypointOverlayItem>() {
    
                    @Override
                    public boolean onItemSingleTapUp(int index, WaypointOverlayItem item) {
                        return false;
                    }
    
                    @Override
                    public boolean onItemLongPress(int index, WaypointOverlayItem item) {
                        return false;
                    }
                });
                // TODO Auto-generated constructor stub
                mContext = context;
            }
          }
    

    将此叠加层添加到您的地图中

          //Add Itemized overlay
            navigatorItemizedOverlay = new NavigatorItemizedOverlay(getActivity(), waypointOverlayItemList);
            mapView.getOverlays().add(navigatorItemizedOverlay);
    

    添加标记:

    navigatorItemizedOverlay.addItem(waypointOverlayItem);
    

    隐藏所有标记:

    navigatorItemizedOverlay.removeAllItems();
    

    还有其他方法:

    removeItem(position) and removeItem(waypointOverlayItem)
    

    【讨论】:

      【解决方案2】:

      在osmdroid中,隐藏/显示覆盖(标记)的方法是:

      Overlay.setEnabled(启用布尔值)

      【讨论】:

      • 我尽快试试这个并告诉你;提前致谢
      • 您的解决方案有效……但我的也是! - 如果您(用户)移动地图,则在 1 和 0 之间切换 setAlpha() 会改变可见性 - 我到现在还没有做! - 只是一点点;如果他不这样做,则不会调用更新;我添加了 map.invalidate() 现在它运行了...
      • setAlpha(0) 适用于标记。但这确实是一个奇怪的解决方案:标记仍然被绘制,只是为了显示......什么都没有。其他缺点:如果上面设置了气泡,隐形标记仍然会在点击时做出反应,并且气泡会打开。
      • 是的,你是对的;所以我发现(因为我喜欢看......)另一个“解决方法”,它看起来很完美并且运行非常快速:当用户想要隐藏它们并恢复初始坐标时,将标记的位置设置在边界框之外并恢复初始坐标,fom一个arrayList,当他想展示它们时。但是非常感谢!
      • Funny :-) 但更糟糕的是 => 现在您必须跟踪地图平移/缩放事件,玩猫和鼠标将标记移出视图... setEnabled() 是您应该使用的方法使用。
      猜你喜欢
      • 2018-06-05
      • 2014-12-01
      • 1970-01-01
      • 2015-10-16
      • 2012-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多