2016-04-24 71 views
1

上繪製新的之前我有這樣的方法:刪除以前的圓圈標示

public void crowdArea(){ 

    for (int n=0; n<place.length; n++) { 
     Location locationFromDB2 = new Location(""); 
     locationFromDB2.setLatitude(latt2[n]); 
     locationFromDB2.setLongitude(longg2[n]); 
     total = 0; 
     double c [][]=new double[100][2]; 
     double p [][]=new double[100][2]; 

     for (int n2 = 0; n2 < latt.length; n2++) { 
      Location locationFromDB3 = new Location(""); 
      locationFromDB3.setLatitude(latt[n2]); 
      locationFromDB3.setLongitude(longg[n2]); 
      float dist = locationFromDB2.distanceTo(locationFromDB3); 

      if (dist < 500f) { 
       c [total][0]=latt[n2]; 
       c [total][1]=longg[n2]; 

       p [total][0]=prelatt[n2]; 
       p [total][1]=prelongg[n2]; 

       total++; 
      } 
     } 
     if (total >= 5) { 
      draw(latt2[n], longg2[n]); 
      state[n]="yes"; 
      boolean b=bearing2(c,p); 
      Log.d("diriction is: ", b+""); 
     } 
     else{ 
      state[n]="no"; 

      // draw2(latt2[n], longg2[n]); 

     } 
    } 
} 

public void draw(double lat, double lonng){ 
    Circle myCircle; 
    LatLng lt=new LatLng(lat, lonng); 
    CircleOptions circleOptions = new CircleOptions() 
      .center(lt) //set center 
      .radius(500) //set radius in meters 
      .fillColor(0x40ff0000) //default 
      .strokeColor(Color.RED) 
      .strokeWidth(5); 
    myCircle = map.addCircle(circleOptions); 
} 

借鑑了我的地圖了一圈。 這個方法每15秒調用一次,但它在前一個圓上繪製一個圓,等等。我想要的是刪除之前的圈子,然後再添加新的圈子。

該怎麼辦?

回答

1

在繪製新圓之前,您可以使用map.clear()清除地圖。

另外,如果你已經繪製在地圖上的其他對象,你不想刪除它們,只是你以前的圈子,你可以這樣做:

private Circle myCircle; 

// ... 

public void draw(double lat, double lonng){ 
    LatLng lt=new LatLng(lat, lonng); 
    CircleOptions circleOptions = new CircleOptions() 
      .center(lt) //set center 
      .radius(500) //set radius in meters 
      .fillColor(0x40ff0000) //default 
      .strokeColor(Color.RED) 
      .strokeWidth(5); 
    if (myCircle != null) { 
     myCircle.remove(); 
    } 
    myCircle = map.addCircle(circleOptions); 
} 

後續根據您的代碼更新:

private List<Circle> circles = new ArrayList<>(); 

public void crowdArea(){ 
    clearCircles(); 

    for (int n=0; n<place.length; n++) { 
     Location locationFromDB2 = new Location(""); 
     locationFromDB2.setLatitude(latt2[n]); 
     locationFromDB2.setLongitude(longg2[n]); 
     total = 0; 
     double c [][]=new double[100][2]; 
     double p [][]=new double[100][2]; 

     for (int n2 = 0; n2 < latt.length; n2++) { 
      Location locationFromDB3 = new Location(""); 
      locationFromDB3.setLatitude(latt[n2]); 
      locationFromDB3.setLongitude(longg[n2]); 
      float dist = locationFromDB2.distanceTo(locationFromDB3); 

      if (dist < 500f) { 
       c [total][0]=latt[n2]; 
       c [total][1]=longg[n2]; 

       p [total][0]=prelatt[n2]; 
       p [total][1]=prelongg[n2]; 

       total++; 
      } 
     } 
     if (total >= 5) { 
      draw(latt2[n], longg2[n]); 
      state[n]="yes"; 
      boolean b=bearing2(c,p); 
      Log.d("diriction is: ", b+""); 
     } 
     else{ 
      state[n]="no"; 

      // draw2(latt2[n], longg2[n]); 

     } 
    } 
} 

public void draw(double lat, double lonng){ 
    LatLng lt=new LatLng(lat, lonng); 
    CircleOptions circleOptions = new CircleOptions() 
      .center(lt) //set center 
      .radius(500) //set radius in meters 
      .fillColor(0x40ff0000) //default 
      .strokeColor(Color.RED) 
      .strokeWidth(5); 
    circles.add(map.addCircle(circleOptions)); 
} 

private void clearCircles() { 
    for (Circle circle : circles) { 
     circle.remove(); 
    } 
    circles.clear(); 
} 
+0

但這也會清除地圖上的所有標記 – LamaTat

+0

是否有一種方法可以保留標記並僅刪除圓圈? – LamaTat

+0

好吧,它工作正常。但是每次調用方法時我都繪製了多個圓圈,使用這將只保留一個圓圈。你可以請檢查我的代碼我更新它。 – LamaTat

2

我建議你使用

if(mapCircle!=null){ 
     mapCircle.remove(); 
    } 

,而不是map.clear()因爲這將刪除地圖上的所有對象

+0

哪裏應該放置此代碼?在方法裏面? – LamaTat

+0

把你的本地變量myCircle轉換成一個字段,然後把它放在你的方法 –

+0

開始工作正常,但是這隻保留了一個圓圈。而該方法每隔15秒被調用一次以上並繪製多個圓圈。你可以請檢查我的代碼我更新它。我想保留最後多個繪製的圓圈。 – LamaTat