2012-10-20 3 views
3

몇 주 전에 안드로이드를 공부하기 시작했습니다. 이제 도움이 필요합니다. 내 작업은이 마커를 클릭 한 후 두 개의 마커가있는 오프라인지도 (OSMDroid 및 Mobile Atlas Creator 사용)와 그 사이의 경로와 일부 활동을 만듭니다. 지도, 표식 및 경로를 완료했습니다. 여기에 코드 (안드로이드 2.3.3)이다OSMDroid : onTap example

공용 클래스 MainActivity는 활동 {

private MapView mapView; 
LocationManager locationManager; 
ArrayList<OverlayItem> overlayItemArray; 

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

    mapView = new MapView(this, 256); 
    mapView.setClickable(true); 
    mapView.setBuiltInZoomControls(true); 
    mapView.getController().setZoom(15); 
    mapView.getController().setCenter(new GeoPoint(54.332, 48.389)); 
    mapView.setUseDataConnection(false); 

    overlayItemArray = new ArrayList<OverlayItem>();   
    OverlayItem olItem = new OverlayItem("Here", "SampleDescription", new GeoPoint(54.332, 48.389));  
    overlayItemArray.add(olItem); 
    overlayItemArray.add(new OverlayItem("Hi", "You're here", new GeoPoint(54.327, 48.389))); 

    PathOverlay myPath = new PathOverlay(Color.RED, this); 
    myPath.addPoint(new GeoPoint(54.327, 48.389)); 
    myPath.addPoint(new GeoPoint(54.332, 48.389)); 
    mapView.getOverlays().add(myPath); 

DefaultResourceProxyImpl defaultResourceProxyImpl = new DefaultResourceProxyImpl(this); 
ItemizedIconOverlay<OverlayItem> myItemizedIconOverlay = new ItemizedIconOverlay<OverlayItem>(overlayItemArray, null, defaultResourceProxyImpl); 
    mapView.getOverlays().add(myItemizedIconOverlay); 

    setContentView(mapView); //displaying the MapView 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.activity_main, menu); 
    return true; 
}  

} 질문을 확장 : 방법이 마커의 onclick-방법을 실현하기 위해? 그리고 profy에 대한 추가 질문 : 올바른 방법 (나는이 프로그램을 수업으로 나누는 법을 의미한다)? 감사합니다. =) 당신은이 같은 새로운 클래스를 만들 필요가

답변

3

: 여기

public class MyOwnItemizedOverlay extends ItemizedIconOverlay<OverlayItem> { 
    protected Context mContext; 

    public MyOwnItemizedOverlay(final Context context, final List<OverlayItem> aList) { 
     super(context, aList, new OnItemGestureListener<OverlayItem>() { 
       @Override public boolean onItemSingleTapUp(final int index, final OverlayItem item) { 
         return false; 
       } 
       @Override public boolean onItemLongPress(final int index, final OverlayItem item) { 
         return false; 
       } 
       }); 
     // TODO Auto-generated constructor stub 
     mContext = context; 
    } 

    @Override 
    protected boolean onSingleTapUpHelper(final int index, final OverlayItem item, final MapView mapView) { 
     //Toast.makeText(mContext, "Item " + index + " has been tapped!", Toast.LENGTH_SHORT).show(); 
     AlertDialog.Builder dialog = new AlertDialog.Builder(mContext); 
     dialog.setTitle(item.getTitle()); 
     dialog.setMessage(item.getSnippet()); 
     dialog.show(); 
     return true; 
    } 
} 

가 첫 번째 (주) 클래스에서 사용하는 방법입니다 :

전부
MapView mapView = new MapView(this, 256); //constructor 
//some code from te question 

ArrayList<OverlayItem> overlayItemArray = new ArrayList<OverlayItem>();     
OverlayItem olItem = new OverlayItem("Here", "SampleDescription", new GeoPoint(54.332, 48.389));//marker 

MyOwnItemizedOverlay overlay = new MyOwnItemizedOverlay(this, overlayItemArray); 
mapView.getOverlays().add(overlay);   
setContentView(mapView); //displaying the MapView 

. 행운을 빕니다! 링크 : http://code.google.com/p/osmdroid/issues/detail?id=245#makechanges