2012-06-07 4 views
0

이 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입니다 :

나는 itemziedoverylay을 제거하기 때문에 명확 호출 할이 둘 이상의 항목 오버레이를 추가 할 수 있지만 아니에요
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; 
    } 

} 

목.

내가 원하는 것은 이것입니다.지도의 특정 지점을 터치하면 이전에 항목화된 오버레이를 삭제해야하며 그 시점에서 새 오버레이를 만들어야합니다. 나는 분명히()를 호출해야하지만 정확히 어디에서해야 하는지를 알 수는 없다는 것을 안다.

답변

2

안녕 당신은 내가 당신이 그 전화를해야) (당신이 수업 시간에 만든 방법이 명확라는 이름의 ItemizedOverlay 것을 말하고 싶은이 코드를 통해 mapoverlay 클래스

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

+0

이 코드를 작성해야 그런 다음 youur 이전 수업에서 그때만 그것은 분명합니다 –

+0

안녕하세요 그것은 당신에게 좋은 회의에 도움이 될 수도 희망 .... –

관련 문제