2

////編集前

以下のコードを使用して Android マップにマーカーを再描画していますが、実際にはマーカーを再描画しますが、古いマーカーは削除されません。試してみました

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

     }

imran khan と agarwal に感謝します。あなたの回答を使用して問題をデバッグしました。

4

3 に答える 3

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 オブジェクトで、itemizedoverlay2 は LocationOverlay です

LocationOverlay を削除します。つまり、OverlayItem の代わりに itemizedoverlay2 を削除します。

于 2012-04-21T11:01:29.127 に答える
1

独自の距離計算機を再発明する理由として、 Locationクラスに組み込まれているものがあります。

チェックアウト

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

2 つの地点間のおおよその距離 (メートル単位) を計算し、必要に応じて、2 つの地点間の最短経路の最初と最後の方位を計算します。

于 2012-04-21T13:29:04.360 に答える
1

これを試して:::

@Override public void onLocationChanged(Location location) { // 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);

}

更新された見てください:::

典型的なカスタム オーバーレイは次のようになります。マップ上に表示されるさまざまな OverlayItems をリストにカプセル化します。

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

メソッドは、個々のオーバーレイ項目を追加/削除するために公開できますが、すべてのオーバーレイ項目を削除することもできます (clear メソッド)。

単一のオーバーレイアイテムを削除する

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();
于 2012-04-21T10:46:26.423 に答える