3

我有一个应用程序,其中一个活动显示地图,另一个类用于在地图上放置标记或任何叠加项目。它现在很好用,但是当用户触摸地图时,它会显示一条带有新位置的消息(此代码在 AddItemizedOverlay 的 ontouche 事件中实现)。

相反,我想将地图上的图钉更改为新位置(主要活动中的代码)。如何将 AddItemizedOverlay 类中的新位置数据传递给主要活动?如何绘制新的用户位置?谢谢!!!

myMapactivity.java

public class myMapactivity extends MapActivity 
{

private MapView mapView;
private MapController mapCtrl;
List<Overlay> mapOverlays;
GeoPoint mePoint;

AddItemizedOverlay itemizedOverlay;
OverlayItem overlayitem;

    public void onCreate(Bundle savedInstanceState)
    {
        ...

       mapView = (MapView) findViewById(R.id.mapview);
   mapView.setSatellite(false);
   mapView.setBuiltInZoomControls(true);

   mapOverlays = mapView.getOverlays();
   mapOverlays.clear();
   mapCtrl = mapView.getController();

       drawCurrentUserLocation();
     }

     private void drawCurrentUserLocation()
{

   // Drawable marker icon
   Drawable drawable_user = this.getResources()
            .getDrawable(R.drawable.mark_red);

   itemizedOverlay = new AddItemizedOverlay(drawable_user, this);

   overlayitem = new OverlayItem(mePoint, "Your Location","That is you!");

   itemizedOverlay.addOverlay(overlayitem);

   mapOverlays.add(itemizedOverlay);
   itemizedOverlay.populateNow();
   mapCtrl.animateTo(mePoint);
   mapCtrl.setZoom(17);
}
}

AddItemizedOverlay.java

   public class AddItemizedOverlay extends ItemizedOverlay<OverlayItem> {

   private ArrayList<OverlayItem> mapOverlays = new ArrayList<OverlayItem>();

   private Context context;

   public AddItemizedOverlay(Drawable defaultMarker) {
        super(boundCenterBottom(defaultMarker));
   }

   public AddItemizedOverlay(Drawable defaultMarker, Context context) {
        this(defaultMarker);
        this.context = context;
   }

   @Override
   public boolean onTouchEvent(MotionEvent event, MapView mapView)
   {   

       if (event.getAction() == 1) {
           GeoPoint geopoint = mapView.getProjection().fromPixels(
               (int) event.getX(),
               (int) event.getY());
           // latitude
           double lat = geopoint.getLatitudeE6() / 1E6;
           // longitude
           double lon = geopoint.getLongitudeE6() / 1E6;

           Geocoder geocoder = new Geocoder(context, Locale.getDefault());   
           String result = null;
           try {
               List<Address> list = geocoder.getFromLocation(lat, lon, 1);
               if (list != null && list.size() > 0) {
                   Address address = list.get(0);
                   // sending back first address line and locality
                   result = address.getAddressLine(0) + ", " + address.getLocality();
                   Toast.makeText(context, result, Toast.LENGTH_SHORT).show();
               }
           } catch (IOException e) {
               Log.e("Error", "Impossible to connect to Geocoder", e);
           } 

       }
       return false;
   } 
4

1 回答 1

0

由于 myMapactivity 是 AddItemizedOverlay 的上下文,您可以使用:

((myMapactivity)context).setMarker(event)在 AddItemizedOverlay 中;这将调用应该在 myMapactivity 中实现的公共方法 setMarker(MotionEvent event)。

于 2012-10-13T21:58:12.837 回答