折线不清除

时间:2019-08-01 09:19:21

标签: java android api maps polyline

尽管使用setVisibility(false),折线仍未清除

我们创建了一条多段线数组列表,并在添加新的多段线时将其添加到列表中。但是我们要清除所有折线而不清除地图,因此没有成功。 我们尝试通过折线数组使用setPoints选项,但无法从arraylist检索所需的折线。它总是会出现IndexOutOfBounds错误。

ArrayList<Polyline> polylines=new ArrayList<Polyline>();

ArrayList points = null;
            Polyline p=null;

            int counter=0;
            for (int i = 0; i < result.size(); i++) {
                counter++;
                points = new ArrayList();
                lineOptions = new PolylineOptions();
                trial1=new ArrayList<ArrayList<LatLng>>();

                List<HashMap<String, String>> path = result.get(i);

                for (int j = 0; j < path.size(); j++) {
                    HashMap<String, String> point = path.get(j);

                    double lat = Double.parseDouble(point.get("lat"));
                    double lng = Double.parseDouble(point.get("lng"));
                    LatLng position = new LatLng(lat, lng);

                    points.add(position);
                }
                trial1.add(points);
                lineOptions.addAll(points);
                lineOptions.width(12);
                lineOptions.color(Color.RED);
                lineOptions.geodesic(true);
                lineOptions.clickable(true);


                if(points.size()!=0 && points!=null && lineOptions!=null) {
                    p = mMap.addPolyline(lineOptions);
                    polylines.add(p);

                }

在主要功能中:

for (int required=0;required<Points.size();required++) {
        if(Points.get(required)!=FINAL.get(required)){
        polylines.get(required).setVisible(false);
        polylines.set(required,null);
        }
        drawPolylines(Points.get(required));
}

其中FINAL是旧位置,Points是新位置数组。

它总是导致:

java.lang.NullPointerException: Attempt to invoke virtual method 'void com.google.android.gms.maps.model.Polyline.setVisible(boolean)' on a null object reference

另一种尝试是remove()选项。

for(int ccc=0;ccc<polylines.size();ccc++) {
        Polyline theta=polylines.get(ccc);        //removing all the polylines in the array
        theta.remove();
     }
        polylines.clear();
        for (required=0;required<Points.size();required++) {
        if(Points.get(required)!=FINAL.get(required))
             drawPolylines(Points.get(required));   //drawing polylines again
      }

但这并没有清除任何折线,而是重新绘制了现有的折线。

1 个答案:

答案 0 :(得分:0)

您可以像下面的

一样在折线对象上调用remove()

假设您这样添加了折线

Polyline polyline = this.mMap.addPolyline(new PolylineOptions().....);

仅通过

删除此折线
polyline.remove();

//重画原因可能是

for (int required=0;required<Points.size();required++) {
        if(Points.get(required)!=FINAL.get(required)){
        polylines.get(required).setVisible(false);
        polylines.set(required,null);
        }
        drawPolylines(Points.get(required)); // you are redrawing polyline here i guess 
}