2012-10-13 3 views
3

지도를 표시하는 활동이 하나 있고지도에 마커 또는 오버레이 항목을 배치하는 데 사용한 다른 클래스가있는 앱이 있습니다. 사용자가 맵을 터치하면 새로운 위치 (이 코드는 AddItemizedOverlay의 ontouche 이벤트에서 구현 됨)가있는 메시지가 표시됩니다.Android MapActivity & ItemizedOverlay onTouchEvent에서 현재 위치 변경

대신지도의 핀을 새 위치 (기본 활동의 코드)로 변경하고 싶습니다. 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; 
    } 
+0

당신은 당신이 무엇을하려고하는지 더 분명히해야합니다. – Luis

답변

0

myMapactivity이 AddItemizedOverlay에 대한 상황이기 때문에, 당신은 사용할 수 있습니다

AddItemizedOverlay에서

((myMapactivity)context).setMarker(event); 이것은 myMapactivity에서 구현되어야하는 공용 메소드 setMarker (MotionEvent 이벤트)를 호출합니다.

+0

감사합니다. 나도 안드로이드에서 newb입니다. 큰 요청이 아니길 바라지 만 myMapActivity에서 메서드에 대한 간단한 예제를 주시겠습니까? 아니면 내가 그것에 대해 더 많이 읽을 수있는 링크를 제공 할 수 있습니까? 고마워, Dave –