【问题标题】:How to get onTap in Polygon in osmdroid?如何在 osmdroid 中的 Polygon 中获取 onTap?
【发布时间】:2015-10-06 18:45:48
【问题描述】:

我画了很多多边形。其中一些重叠。我希望能够检测到多边形内的点击并显示一个对话框,说明它在多边形内被点击(应该在点击时检测到这个多边形)。这种属性可以在 ItemizedIconOverlay 中看到,我们可以通过点击 OverlayItem 来检测所有 OverlayItem。如何在多边形上实现?

我绘制和添加多边形的方式是:

MyPolygon myNewPolygon = new MyPolygon(this);
myPolygon.setPoints(Polygon.pointsAsCircle(new GeoPoint(38.948714, -76.831918), 20000.0));
map.getOverlays().add(myPolygon);
myNewPolygon.setPoints(Polygon.pointsAsCircle(new GeoPoint(38.851777, -77.037878), 20000.0));
map.getOverlays().add(myNewPolygon);

【问题讨论】:

    标签: maps polygon openstreetmap android-maps osmdroid


    【解决方案1】:

    有多种答案,具体取决于您想要达到的目标。

    简单案例:如果您只想打开一个气泡,那么只需为您的多边形设置一个信息窗口,如教程中所述。

    如果您想要其他任何东西:对于多边形,没有可用的侦听器,就像标记和折线一样(可能是对请求的增强?)。

    所以你可以做的是多边形的子类——就像你对 MyPolygon 所做的那样。然后覆盖 onTap 方法 - 或者很可能是 onSingleTapConfirmed - 并实现您需要的行为。

    查看Polygon.onSingleTapConfirmed 源可能会有所帮助(例如命中测试)。

    【讨论】:

    • 我是这样做的,但是每次点击都会调用每个多边形的所有 Polygon.onSingleTapConfirmed() 方法。例如,我有 20 个多边形,即使我单击其中一个或只是单击地图上的任何位置,也不管调用 Polygon.onSingleTapConfirmed() 方法 20 次。
    • 而且,由于重叠的多边形,下面的多边形不会被点击,这就是为什么我需要知道有多少多边形覆盖在那个特定的点击位置
    • 回答 1) 是的。这就是为什么在 onSingleTapConfirmed 中您必须使用 Polygon.contains 方法执行“命中测试”。如果点击是在多边形上,那么你应该返回 true:这是“消费事件”,并且该方法不会在这个“下方”的任何其他覆盖层上调用。回答 2) 是的。覆盖按降序检查。因此,被其他多边形覆盖的多边形将无法点击。很平常。你期待其他行为吗?
    【解决方案2】:

    这就是我的使用方式:

    class CustomTapPolygon extends Polygon {
    
        private CustomObject tag;
    
        public CustomObject getTag() {
            return tag;
        }
    
        public void setTag(CustomObject tag) {
            this.tag = tag;
        }
    
        @Override
        public boolean onSingleTapUp(MotionEvent e, MapView mapView) {
            if (e.getAction() == MotionEvent.ACTION_UP && contains(e)) {
                 // YOUR CODE HERE
                 return true;
            }
            return super.onSingleTapUp(e, mapView);
        }
    }
    

    【讨论】:

      【解决方案3】:

      你试过 osmbonuspack 了吗?我确定其中有一个多边形的 onclick 侦听器。

      【讨论】:

      • 我无法跟踪多边形的 Onclick 侦听器。我能做的最好的事情是扩展 MapEventsOverlay 并在它的 OnSingleTapUp 上使用多边形的 contains(Event e) 方法来传递 Tap 方法来检测对多边形的点击。您能否指导我使用多边形的 onclick 侦听器。谢谢
      • 我正在使用 osmbonuspack_v5.3
      猜你喜欢
      • 2021-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-31
      • 1970-01-01
      • 2021-03-11
      • 2017-10-05
      相关资源
      最近更新 更多