我制作在线地图并尝试添加可触摸的路径/轨道(当用户触摸它们时我会改变它们的颜色)。在一个地图上,我有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的那个)
如何检查/区分我触摸的路径?
答案 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
感谢所有答案!