我想在Google地图v2的Android版上点击一个点。如果点击的点与折线路径上的某个点相交,则显示该折线路径。我没有看到任何关于Android中折线可点击事件的文档。我尝试扩展当前的Polyline对象(标记为final),但无法实现。还有其他什么选择吗?
您可以使用库: https://github.com/googlemaps/android-maps-utils
然后使用以下方法(在OnMapClickListener中)检测折线的点击:
PolyUtil.isLocationOnPath(point, polyline.getPoints(), isGeodesic, tolerance);
最近更新的地图API v8.4 引入了可点击 Polyline
。根据文档所述:
使用
OnPolylineClickListener
监听可点击Polyline上的点击事件。要在地图上设置此侦听器,请调用googleMap.setOnPolylineClickListener(...)
。当用户单击Polyline时,您将收到一个onPolylineClick(Polyline)
回调。
gradle-dependency:
compile 'com.google.android.gms:play-services-maps:8.4.0'
实现回调: GoogleMap.OnPolylineClickListener
初始化折线:
Polyline polyline = googleMap.addPolyline(options);
polyline.setClickable(true);
...
接收事件
@Override
public void onPolylineClick(Polyline polyline) {
....
}
愉快的编码 :)
int i = 0;//create an indexer for the loop
double shortestDist = 100;//set an initial very large dist just to be safe
int myIndex = 0;//set variable that will store the running index of the closest point
foreach (PolylineOptions po in myPolylines) {
var thisDist = Distance (point, midPoint (po.Points [0].Latitude, po.Points [0].Longitude, po.Points [1].Latitude, po.Points [1].Longitude));//calculate distance between point and midpoint of polyline
if (thisDist < shortestDist) {
shortestDist = thisDist;//remember current shortest distance
myIndex = i;//set closest polyline index to current loop iteration
}
i++;
}
注册OnMapClickListener
。自己确定给定的点击是否在你的线上。如果是,就按照你想要的方式进行操作。
dispatchTouchEvent()
能正常工作感到印象深刻。我原以为这可能会破坏地图的平移/缩放等功能。但是,是的,OnMapClickListener
只适用于简单的点击操作。 - CommonsWare如果您正在使用com.google.android.gms:play-services-maps:8.4.0
,那么它包含折线点击监听器。
googleMap.setOnPolylineClickListener(new GoogleMap.OnPolylineClickListener()
{
@Override
public void onPolylineClick(Polyline polyline)
{
//do your work selected polyline
}
});
PolylineOptions line = new PolylineOptions();
Polyline polyline = googleMap.addPolyline(line);
polyline.setClickable(true);