如何在触摸时删除ItemOverlay并添加另一个触摸?

问题描述:

这是MapOverlay:如何在触摸时删除ItemOverlay并添加另一个触摸?

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

} 

我能够用这种添加多个项目的覆盖,但不能通话清晰,从而以去除itemziedoverylay项目。

我想要做的是:当我触及地图的特定点时,应该删除以前的分项叠加,并且应该创建一个新点。我知道我必须调用clear(),但无法弄清楚我应该在哪里做。

嗨,你必须通过这个代码在你mapoverlay类

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

+0

来写这个代码,我想告诉你在课堂上所做的方法ItemizedOverlay命名清晰(),你必须调用在你以前的课上,然后只有它会清除 –

+0

嗨,希望它可能会有助于你很高兴见到你.... –