0

これはMapOverlayです:

class MapOverlay extends com.google.android.maps.Overlay
{
    @Override
    public boolean draw(Canvas canvas, MapView mapView, 
    boolean shadow, long when) 
    {

            return true;

    }


    @Override
    public boolean onTouchEvent(MotionEvent event, MapView mapView) 
    {   
        //---when user lifts his finger---
        if (event.getAction() == 1) {                
            GeoPoint p = mapView.getProjection().fromPixels(
                (int) event.getX(),
                (int) event.getY());


            List<Overlay> mapOverlays = mapView.getOverlays();
            Drawable drawable = getResources().getDrawable(R.drawable.splash_logo);
            ItemizedOverlay itemizedoverlay = new ItemizedOverlay(drawable, getApplicationContext());

            OverlayItem overlayitem = new OverlayItem(p, "I'm in LA!");
            itemizedoverlay.addOverlay(overlayitem);
            mapOverlays.add(itemizedoverlay);

            mapView.invalidate();

            Geocoder geoCoder = new Geocoder(
                getBaseContext(), Locale.getDefault());
            try {
                List<Address> addresses = geoCoder.getFromLocation(
                    p.getLatitudeE6()  / 1E6, 
                    p.getLongitudeE6() / 1E6, 1);

                 String add = "";
                if (addresses.size() > 0) 
                {
                    for (int i=0; i<addresses.get(0).getMaxAddressLineIndex(); 
                         i++)
                       add += addresses.get(0).getAddressLine(i) + "\n";
                }

                //Toast.makeText(getBaseContext(), add, Toast.LENGTH_SHORT).show();
                addr = add;
            }
            catch (IOException e) {                
                e.printStackTrace();
            }   

            return true;
        }
        else                
            return false;
    }        
}

これは ItemizedOverlay です:

class ItemizedOverlay extends com.google.android.maps.ItemizedOverlay<OverlayItem>{


    private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>();
    private Context mContext;

    public ItemizedOverlay(Drawable defaultMarker) {
     super(boundCenterBottom(defaultMarker));
    // TODO Auto-generated constructor stub
    }
    public ItemizedOverlay(Drawable defaultMarker, Context context) {
      super(boundCenterBottom(defaultMarker));
      mContext = context;
    }

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

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

    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
    protected boolean onTap(int index) {
      OverlayItem item = mOverlays.get(index);
      AlertDialog.Builder dialog = new AlertDialog.Builder(mContext);
      dialog.setTitle(item.getTitle());
      dialog.setMessage(item.getSnippet());
      dialog.show();
      return true;
    }

}

これで複数のアイテムオーバーレイを追加できますが、アイテムを削除するために clear を呼び出すことはできません。

私がやりたいことはこれです: マップの特定のポイントに触れると、以前のアイテム化されたオーバーレイが削除され、そのポイントに新しいオーバーレイが作成されます。clear() を呼び出す必要があることはわかっていますが、正確にどこでそれを行うべきかを理解できません。

4

1 に答える 1

1

こんにちは、このコードを mapoverlay クラスに記述する必要があります

if (itemizedoverlay != null) { itemizedoverlay.overlayClear(); }

于 2012-06-07T12:54:02.647 に答える