2012-03-27 194 views
5

我让用户把一个标志,如果他把另一个标记,我会删除另一个标记 则:发送的GeoPoint到另一个活动

我想采取的GeoPoint此标记,并将其发送到另一个活动作为字符串 这是我的代码,

我怎样才能通过故意发送markerGP = pt; markerGP到另一个活动

public class AndroidLocationActivity extends MapActivity { 

private MapView map=null; 
    private MyLocationOverlay me=null; 
    private LocationManager locationManager; 
    private GeoPoint markerGP = null; 
    private boolean markerAdded = false; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     map=(MapView)findViewById(R.id.mapview); 

     map.getController().setCenter(getPoint(40.76793169992044, 
         -73.98180484771729)); 
     map.getController().setZoom(17); 
     map.setBuiltInZoomControls(true); 

     Drawable marker=getResources().getDrawable(R.drawable.marker); 

     marker.setBounds(0, 0, marker.getIntrinsicWidth(), 
         marker.getIntrinsicHeight()); 

     map.getOverlays().add(new SitesOverlay(marker)); 

     myLocation(); 
    } 

    @Override 
    public void onResume() { 
     super.onResume(); 

     me.enableCompass(); 
    } 

    @Override 
    public void onPause() { 
     super.onPause(); 
     // markerAdded = false; 
     me.disableCompass(); 
    } 

    @Override 
    protected boolean isRouteDisplayed() { 
     return(false); 
    } 

    @Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
     if (keyCode == KeyEvent.KEYCODE_S) { 
       map.setSatellite(!map.isSatellite()); 
       return(true); 
     } 
     else if (keyCode == KeyEvent.KEYCODE_Z) { 
       map.displayZoomControls(true); 
       return(true); 
     } 

     return(super.onKeyDown(keyCode, event)); 
    } 

    public void myLocation() 
    { 

     locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
     locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 
         0, new GeoUpdateHandler()); 

     me = new MyLocationOverlay(this, map); 
     me.enableMyLocation(); 
     map.getOverlays().add(me); 
     map.invalidate(); 

     me.runOnFirstFix(new Runnable() { 
       public void run() { 
         map.getController().animateTo(
             me.getMyLocation()); 
       } 
     }); 
    } 

    private GeoPoint getPoint(double lat, double lon) { 
     return(new GeoPoint((int)(lat*1000000.0), 
         (int)(lon*1000000.0))); 
    } 

     private class SitesOverlay extends ItemizedOverlay<OverlayItem> { 
     private List<OverlayItem> items=new ArrayList<OverlayItem>(); 
     private Drawable marker=null; 
     private OverlayItem inDrag=null; 
     private ImageView dragImage=null; 
     private int xDragImageOffset=0; 
     private int yDragImageOffset=0; 
     private int xDragTouchOffset=0; 
     private int yDragTouchOffset=0; 

     private boolean moved = true; 

     public SitesOverlay(Drawable marker) { 
       super(marker); 
       this.marker=marker; 

       dragImage=(ImageView)findViewById(R.id.drag); 
       xDragImageOffset=dragImage.getDrawable().getIntrinsicWidth()/2; 
       yDragImageOffset=dragImage.getDrawable().getIntrinsicHeight(); 

       populate(); 
     } 

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

     @Override 
     public void draw(Canvas canvas, MapView mapView, 
         boolean shadow) { 
       super.draw(canvas, mapView, shadow); 

       boundCenterBottom(marker); 
     } 

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

      @Override 
      public boolean onTouchEvent(MotionEvent event, MapView mapView) { 
       final int action=event.getAction(); 
       final int x=(int)event.getX(); 
       final int y=(int)event.getY(); 

       GeoPoint pt=map.getProjection().fromPixels(x-xDragTouchOffset, 
           y-yDragTouchOffset); 

       boolean result=false; 

       if (action==MotionEvent.ACTION_DOWN) { 
         moved = false; 

         for (OverlayItem item : items) { 
           Point p=new Point(0,0); 
           inDrag = null; 
           map.getProjection().toPixels(item.getPoint(), p); 

           if (hitTest(item, marker, x-p.x, y-p.y)) { 
             result=true; 
             inDrag=item; 
             items.remove(inDrag); 
             populate(); 

             xDragTouchOffset=0; 
             yDragTouchOffset=0; 

             setDragImagePosition(p.x, p.y); 
             dragImage.setVisibility(View.VISIBLE); 

             xDragTouchOffset=x-p.x; 
             yDragTouchOffset=y-p.y; 

             break; 
           } 
         } 
       } 
       else if (action==MotionEvent.ACTION_MOVE) { 
         moved = true; 
         if(inDrag!=null) 
         { 
           setDragImagePosition(x, y); 
           result=true; 
         } 

       } 
       //Drop dragged marker 
       else if (action==MotionEvent.ACTION_UP && inDrag!=null) { 
         dragImage.setVisibility(View.GONE); 

         OverlayItem toDrop=new OverlayItem(pt, inDrag.getTitle(), 
             inDrag.getSnippet()); 

         items.add(toDrop); 
         populate(); 

         inDrag=null; 
         result=true; 
       } 
       //Add new marker to the map 
       else if (action==MotionEvent.ACTION_UP && inDrag == null) { 

         if(!markerAdded && !moved) 
         { 
           //GeoPoint `pt` 
           markerGP = pt; 
           OverlayItem toDrop=new OverlayItem(pt, "TITLE", "SNIPPET"); 

           items.add(toDrop); 
           populate(); 

           markerAdded = true; 
           inDrag=null; 
           result=true; 
         } 
       } 


       return(result || super.onTouchEvent(event, mapView)); 
     } 

     private void setDragImagePosition(int x, int y) { 
       RelativeLayout.LayoutParams lp= 
         (RelativeLayout.LayoutParams)dragImage.getLayoutParams(); 

       lp.setMargins(x-xDragImageOffset-xDragTouchOffset, 
           y-yDragImageOffset-yDragTouchOffset, 0, 0); 
       dragImage.setLayoutParams(lp); 
     } 
    } 

    public class GeoUpdateHandler implements LocationListener { 

     @Override 
     public void onLocationChanged(Location location) { 
       int lat = (int) (location.getLatitude() * 1E6); 
       int lng = (int) (location.getLongitude() * 1E6); 
       GeoPoint point = new GeoPoint(lat, lng); 
       map.getController().animateTo(point); //map.getController().setCenter(point); 

     } 

     @Override 
     public void onProviderDisabled(String provider) { 
     } 

     @Override 
     public void onProviderEnabled(String provider) { 
     } 

     @Override 
     public void onStatusChanged(String provider, int status, Bundle extras) { 
     } 
    } 
    } 

你能解决我的代码?我reeally坚持在这里!

回答

1

尝试做的是:

items = new(); 
    items.add(toDrop); 
    populate(); 

希望会有所帮助。

+0

我应该在哪里放? – Maha 2012-04-07 21:55:32

相关问题