我尝试了很多方法,但无法找到与此相关的任何内容。我可以在两个位置之间显示多条路径,例如。
但是当我点击折线时,我已经更改了选定的折线颜色并且工作正常。但由于有多条路线重叠,我无法设法将折线显示在所有其他路线之上。
当我第二次点击另一个折线时,折线也会改变颜色,但之前选择的折线应该改变它的颜色。
所以请帮我解决这个问题......
谢谢。onDirectionFinderSuccess
@Override
public void onDirectionFinderSuccess(final List<Route> routes)
{
commonUtils.hideProgressDialog();
polylinePaths = new ArrayList<>();
originMarkers = new ArrayList<>();
destinationMarkers = new ArrayList<>();
for (int i = 0; i < routes.size(); i++)
{
Route route = routes.get(i);
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(route.startLocation, 13));
originMarkers.add(mMap.addMarker(new MarkerOptions()
.icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_dot))
.title(route.startAddress)
.position(route.startLocation)));
destinationMarkers.add(mMap.addMarker(new MarkerOptions()
.icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_dot))
.title(route.endAddress)
.position(route.endLocation)));
PolylineOptions polylineOptions = new PolylineOptions().
geodesic(true).
color(Color.GRAY).clickable(true).
width(7);
for (int j = 0; j < route.points.size(); j++)
polylineOptions.add(route.points.get(j));
routepoints = route.points.toString();
polylinePaths.add(mMap.addPolyline(polylineOptions));
mMap.setOnPolylineClickListener(new GoogleMap.OnPolylineClickListener()
{
@Override
public void onPolylineClick(Polyline polyline)
{
polyline.setColor(Color.BLUE);
}
});
}
}
答案 0 :(得分:1)
这里我列出了从多个折线
选择折线的一般逻辑首先将所有折线存储在polylines
private List<Polyline> polylines = new ArrayList<>();
使用以下代码
将所有折线添加到折线中以备将来使用 Polyline polyline = mMap.addPolyline(new PolylineOptions()
.addAll(list)
.width(15)
.color(colorCode).geodesic(true));
polyline.setClickable(true);
polylines.add(polyline);
将默认折线设置为选中,并在单击折线时更新折线
setSelectedPath(polylines.get(0).getId());
mMap.setOnPolylineClickListener(new GoogleMap.OnPolylineClickListener() {
@Override
public void onPolylineClick(Polyline polyline) {
//update the poliline as selected
setSelectedPath(polyline.getId());
}
});
将折线更新为选中并取消选择其他折线
的功能 void setSelectedPath(String id) {
Polyline selectedPolyLine = null;
for (int i = 0; i < polylines.size(); i++) {
Polyline polyline = polylines.get(i);
polyline.setZIndex(0);
if (polyline.getId().equalsIgnoreCase(id)) {
selectedPolyLine = polyline;
selectedPolyLine.setZIndex(10);
}
// set unselected color to poliline
polyline.setColor(context.getResources().getColor(Color.GRAY);
}
if (selectedPolyLine != null) {
// set selected color to polyline
selectedPolyLine.setColor(Color.BLUE);
}
}
注意: selectedPolyLine.setZIndex(10); 是必需的,因为它会从其他折线上获取TOP上的折线并正确显示设置颜色而不会重叠。
在你的情况下
你必须使用onPolylineClick
答案 1 :(得分:1)
要显示所选折线而不是其他折线,您必须设置zIndex。
要取消选择先前选定的行,必须将折线保存为全局变量
public Polyline pathToTraverse;
@Override
public void onDirectionFinderSuccess(final List<Route> routes)
{
...
mMap.setOnPolylineClickListener(new GoogleMap.OnPolylineClickListener()
{
@Override
public void onPolylineClick(Polyline polyline)
{
if(pathToTraverse != null)
pathToTraverse.setColor(Color.GRAY);
pathToTraverse = polyline;
polyline.setColor(Color.BLUE);
polyline.setZIndex(routes.size() - 1);
}
});
}
答案 2 :(得分:0)
首先将所有polylinePaths路线的颜色更改为Gray ...
然后设置click listener ..
mMap.setOnPolylineClickListener(new GoogleMap.OnPolylineClickListener()
{
@Override
public void onPolylineClick(Polyline polyline)
{
polyline.setColor(Color.BLUE);
}
});