PathOverlay触摸事件通过每个PathOverlay传递

时间:2014-01-23 09:06:02

标签: android dictionary touch overlay osmdroid

我制作在线地图并尝试添加可触摸的路径/轨道(当用户触摸它们时我会改变它们的颜色)。在一个地图上,我有6-7个PathOverlays,添加了onDown事件处理:

private class PathOverlayExtended extends PathOverlay 
{
    public PathOverlayExtended(int color, Context ctx, long trackId, HistoryDetailFragment currentFragment) {
        super(color, ctx);
        trackIndex = trackId;
        fragment = currentFragment;
    }
    private long trackIndex;
    private HistoryDetailFragment fragment;

    @Override
    public boolean onDown(final MotionEvent event, final MapView mapView) {
    fragment.onRoadClicked(trackIndex);
        return super.onDown(event,mapView);
    }

}

然后我触摸屏幕上的一条路径,它捕获事件并继续通过每条路径。重要提示:它始终从相同的路径开始(最后添加到Olerlays的路径)。

当我将“return super.onDown(event,mapView)”替换为“return true”时,只有最后一个路径捕获事件,这不是我触摸的那个(但是最后添加到Overlays的那个)

如何检查/区分我触摸的路径?

2 个答案:

答案 0 :(得分:0)

我实现了类似的功能,用于检测填充多边形上的触摸。 它使用Android区域。

原则是“放置”在“区域”中绘制的路径: region.setPath(mPath,new Region((int)bounds.left,(int)bounds.top,(int)bounds.right,(int)bounds.bottom));

然后检查触摸点是否在此区域中: region.contains(point.x,point.y);

不知道这个“包含”方法是如何实现的,但是它起作用,并且看起来非常有效。魔法。我想它也适用于折线。

您可以在此处查看完整代码: http://code.google.com/p/osmbonuspack/source/browse/trunk/OSMBonusPack/src/org/osmdroid/bonuspack/overlays/Polygon.java

答案 1 :(得分:0)

我无法找到解决问题的方法,所以最后我决定采用以下方式解决问题。

首先,我创建了自己的PathOverlayExtended类,它继承了PathOverlay。然后我添加了一些变量 - 路径区域的边界(最大和最小纬度和经度)。

其次,我检查了水龙头坐标是否适合这些边界。这样,我只能获得与我的点击相关的那些路径。

最后,我检查了从敲击坐标到每个线段的距离,并选择了最小的一个。那就是它。

我使用了viesturz的答案,这对我非常有帮助:

https://code.google.com/p/osmdroid/issues/detail?id=36

感谢所有答案!