如何在地图上一次只选择一条折线

时间:2018-03-23 10:25:59

标签: android

我尝试了很多方法,但无法找到与此相关的任何内容。我可以在两个位置之间显示多条路径,例如。

enter image description here

但是当我点击折线时,我已经更改了选定的折线颜色并且工作正常。但由于有多条路线重叠,我无法设法将折线显示在所有其他路线之上。

enter image description here

当我第二次点击另一个折线时,折线也会改变颜色,但之前选择的折线应该改变它的颜色。

enter image description here

所以请帮我解决这个问题......

谢谢。

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);
            }
        });
    }
}

3 个答案:

答案 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

中的折线id来调用setSelectedPath()

答案 1 :(得分:1)

  1. 要显示所选折线而不是其他折线,您必须设置zIndex。

  2. 要取消选择先前选定的行,必须将折线保存为全局变量

    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);
            }
        });