Android OSMDroid:onTap示例

Android OSMDroid:onTap示例,android,onclick,osmdroid,Android,Onclick,Osmdroid,几周前我开始学习Android,现在我需要你的帮助。 我的任务是创建离线地图(使用OSMDroid和Mobile Atlas Creator),上面有两个标记,它们之间的路径和单击这些标记后的一些活动。我已经完成了地图、标记和路径。以下是代码(Android 2.3.3): 公共类MainActivity扩展了活动{ private MapView mapView; LocationManager locationManager; ArrayList<OverlayItem> ove

几周前我开始学习Android,现在我需要你的帮助。 我的任务是创建离线地图(使用OSMDroid和Mobile Atlas Creator),上面有两个标记,它们之间的路径和单击这些标记后的一些活动。我已经完成了地图、标记和路径。以下是代码(Android 2.3.3):

公共类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;
}    
私有地图视图地图视图;
地点经理地点经理;
ArrayList overlayItemArray;
@凌驾
创建时的公共void(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mapView=新的mapView(此,256);
mapView.setClickable(真);
mapView.SetBuilTinZoomControl(真);
mapView.getController().setZoom(15);
setCenter(新的地质点(54.332,48.389));
setUseDataConnection(false);
overlayItemArray=新的ArrayList();
OverlayItem olItem=新的OverlayItem(“此处”,“样本描述”,新地质点(54.332,48.389));
overlayItemArray.add(olItem);
添加(新的OverlayItem(“嗨”,“你在这里”,新的地质点(54.327,48.389));
PathOverlay myPath=新的PathOverlay(Color.RED,this);
myPath.addPoint(新地质点(54.327,48.389));
myPath.addPoint(新地质点(54.332,48.389));
mapView.getOverlays().add(myPath);
DefaultResourceProxyImpl DefaultResourceProxyImpl=新的DefaultResourceProxyImpl(此);
itemizedictionoverlay myitemizedictionoverlay=新的itemizedictionoverlay(overlayItemArray,null,defaultResourceProxyImpl);
mapView.getOverlays().add(MyItemIzedEdiconOverlay);
setContentView(mapView);//显示mapView
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
getMenuInflater().充气(R.menu.activity\u主菜单);
返回true;
}    
} 问题:如何实现此标记的onClick方法?profy的另外一个问题是:如何正确操作(我的意思是如何将这个程序按类划分)?
非常感谢!=)

您需要创建新类,如下所示:

    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;
    }
}
公共类MyownItemizeOverlay扩展了ItemizedOnOverlay{
保护上下文mContext;
公共MyOwnItemizeOverlay(最终上下文,最终列表列表){
super(上下文、列表、新OnItemTestureListener(){
@覆盖公共布尔值onItemSingleTapUp(最终整型索引,最终覆盖项项){
返回false;
}
@覆盖公共布尔值(最终整型索引、最终覆盖项){
返回false;
}
} );
//TODO自动生成的构造函数存根
mContext=上下文;
}
@凌驾
受保护的布尔值OnSingleTapUpCelper(最终整数索引、最终覆盖项、最终地图视图地图视图){
//Toast.makeText(mContext,“项”+index+“已点击!”,Toast.LENGTH\u SHORT.show();
AlertDialog.Builder dialog=新建AlertDialog.Builder(mContext);
setTitle(item.getTitle());
setMessage(item.getSnippet());
dialog.show();
返回true;
}
}
下面是如何在第一个(主)类中使用它:

MapView-MapView=新的MapView(这个,256)//建造师
//问题中的一些代码
ArrayList overlayItemArray=新的ArrayList();
OverlayItem olItem=新的OverlayItem(“此处”,“样本描述”,新地质点(54.332,48.389))//标记
MyOwnItemizedOverlay=新的MyOwnItemizedOverlay(此为overlayItemArray);
mapView.getOverlays().add(覆盖);
setContentView(地图视图)//显示地图视图
就这些。祝你好运 链接:

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