2012-04-21 67 views
2

////之前编辑如何删除标记,并在Android地图改变位置时

我使用下面的代码重绘的Android地图上的标记再次重绘,实际上它重绘的标志,但它不” t删除旧的,我试过

mapView.invlaidate 

但它没有删除旧的。

这里是onLocationChanged功能:

@Override 
public void onLocationChanged(Location location) { 
    // mapView.invalidate(); 

     //getCurrantPoint(); 
     OverlayItem currentOverlay = new OverlayItem(getCurrantPoint(),"Current Location","Here is my current location!!!"); 

      itemizedoverlay2.addOverlay(currentOverlay); 
      mapOverlays.add(itemizedoverlay2); 
      mapOverlays.remove(currentOverlay); 
      Log.v("TAG", "Removeeeeeeeeeeeeeeeed"); 

     /// 
     //mapOverlays.add(itemizedoverlay); 
} 

在此先感谢。

/////后编辑

if(itemizedoverlay2!=null) 
    { 
     mapOverlays.remove(itemizedoverlay2); 

     itemizedoverlay2 = new HelloItemizedOverlay(drawable2, cntxt); 
     OverlayItem currentOverlay = new OverlayItem(getCurrantPoint(),"Current Location","Here is my current location!!!"); 
     itemizedoverlay2.addOverlay(currentOverlay); 

     mapOverlays.add(itemizedoverlay2); 
    } 
    else 
    { 
      itemizedoverlay2 = new HelloItemizedOverlay(drawable2, cntxt); 

      OverlayItem currentOverlay = new OverlayItem(getCurrantPoint(),"Current Location","Here is my current location!!!"); 
      itemizedoverlay2.addOverlay(currentOverlay); 
      mapOverlays.add(itemizedoverlay2); 

    } 

非常感谢伊姆兰·罕和阿加瓦尔;我用你的答案来调试问题。

+0

所以终于解决了你的问题? – 2012-04-21 12:34:09

+0

是的,还有另一个问题出现 - 我想计算两个位置之间的距离:) – Amt87 2012-04-21 13:24:59

回答

1

试试这个:::

@覆盖 公共无效onLocationChanged(位置定位){// mapView.invalidate();

//getCurrantPoint(); 
    OverlayItem currentOverlay = new OverlayItem(getCurrantPoint(),"Current Location","Here is my current location!!!"); 
     itemizedoverlay2.clear(); 
     itemizedoverlay2.addOverlay(currentOverlay); 
     //in above line create new itemizedoverlay2 every time. 
     mapOverlays.clear(); 
     mapOverlays.add(itemizedoverlay2);    

    /// 
    //mapOverlays.add(itemizedoverlay); 

}

更新看看:::

一个典型的自定义背景画面看起来是这样的。它将地图上显示的各种OverlayItem封装在列表中。

public class MyItemizedOverlay extends ItemizedOverlay<OverlayItem>{ 

    private List<OverlayItem> mOverlays = new ArrayList<OverlayItem>(); 

    public MyItemizedOverlay(Drawable defaultMarker) { 
     super(boundCenterBottom(defaultMarker));   
    } 

    @Override 
    protected OverlayItem createItem(int i) { 
     return mOverlays.get(i); 
    } 

    public void addOverlay(OverlayItem overlay) { 
     mOverlays.add(overlay); 
     populate(); 
    } 

    public void removeOverlay(OverlayItem overlay) { 
     mOverlays.remove(overlay); 
     populate(); 
    } 


    public void clear() { 
     mOverlays.clear(); 
     populate(); 
    } 

    @Override 
    public int size() { 
     return mOverlays.size(); 
    } 
} 

方法可以暴露添加/删除个别覆盖图,但也可以删除所有覆盖图(清除方法)。

删除单个overlayitem

MyItemizedOverlay sitesOverlay = (MyItemizedOverlay) map.getOverlays().get(0); 
sitesOverlay.removeOverlay(overlay); 

添加一个overlayItem

MyItemizedOverlay sitesOverlay = (MyItemizedOverlay) map.getOverlays().get(0); 
sitesOverlay.addOverlay(new OverlayItem(p, "title", "snippet")); 

删除所有overlayItems

MyItemizedOverlay sitesOverlay = (MyItemizedOverlay) map.getOverlays().get(0); 
sitesOverlay.clear(); 
+0

我试过了,但它也保留了旧的。 – Amt87 2012-04-21 11:21:36

+1

可能是您的位置相同,或创建itemizedoverlay2的新实例 – 2012-04-21 11:34:19

+0

位置已更改;它吸引了新的位置,但它也保留了旧的位置。 – Amt87 2012-04-21 12:17:37

3

试试这个:

OverlayItem currentOverlay = new OverlayItem(getCurrantPoint(),"Current Location","Here is my current location!!!"); 
itemizedoverlay2.addOverlayItem(currentOverlay); 
mapOverlays.getOverlays().add(itemizedoverlay2); 
mapOverlays.getOverlays().remove(itemizedoverlay2); 
mapOverlays.invalidate(); 
Log.v("TAG", "Removeeeeeeeeeeeeeeeed"); 

// mapOverlays是你的MapView obejct和itemizedoverlay2是你LocationOverlay

删除LocationOverlay即itemizedoverlay2而不是OverlayItem

+0

我试过这个,但也没有改变...其实我得到了一个解决方案,也许它会在另一个地方工作,你会在问题中检查它吗? – Amt87 2012-04-21 12:32:38

1

为什么重塑自己的距离计算器,还有一个内置的Location类。

退房

distanceBetween(double startLatitude, double startLongitude, double endLatitude, double endLongitude, float[] results) 

计算在两​​个位置之间米的大致距离,以及可选它们之间的最短路径的最初和最终轴承。

+1

两点之间的距离 – 2012-04-21 13:29:36

+0

你有没有例子如何正确使用它,因为我试着distanceTo和distanceBetween但它返回未知数据(对我) – Amt87 2012-04-23 07:13:43

+0

请参考文章中的链接 – 2012-04-23 07:43:02

相关问题