我制作在线地图,并试图添加可触摸的路径/轨道(我改变他们的颜色,当用户触摸他们)。在一张地图上,我有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);
}
}然后我触摸屏幕上的一条路径,它捕捉事件并贯穿每条路径。重要:它总是从相同的路径开始(在末尾添加到Olerlay中的路径)。
当我将“返回super.onDown(事件,mapView)”替换为“返回真”时,只有最后一条路径捕获事件,而这不是我所触摸的路径(而是在末尾添加到覆盖中的路径)。
如何检查/区分我所接触的路径?
发布于 2014-02-19 20:06:22
我实现了一些类似的东西,用于检测填充多边形上的触摸。它使用的是Android区域。
原则是“放置”绘制在“区域”中的路径: region.setPath(mPath,新区域( (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
发布于 2014-03-13 08:16:59
我找不到解决我的问题的好办法,所以最后,我决定用以下的方式解决问题。
首先,我创建了我自己的PathOverlayExtended类,它是PathOverlay的一部分。然后,我添加了一些变量-路径区域的边界(最大和最小纬度和经度)。
其次,我检查点击坐标是否符合这个界限。这样,我只能得到那些可以被理解为与我的踢踏舞相关的路。
最后,我检查了从抽头坐标到每个线段的距离,并选择了最小的一个。就这样。
我用了viesturz的回答,这对我很有帮助:
https://code.google.com/p/osmdroid/issues/detail?id=36
谢谢你的回答!
https://stackoverflow.com/questions/21303678
复制相似问题