android - OSMDroid:onTap 示例

标签 android onclick osmdroid

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

公共(public)类 MainActivity 扩展 Activity {

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 的另一个问题:如何正确地做(我的意思是如何按类划分这个程序)? 非常感谢! =)

最佳答案

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

    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

关于android - OSMDroid:onTap 示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12991175/

相关文章:

android - 如何使用 Osmdroid 库在两个坐标之间绘制曲线

java - 添加标记到 OSMdroid 5.5 map

android - 使用maven将android facebook sdk打包为apklib

java - Android Joda Time,从 ISOPeriodFormat 排序字符串时遇到问题

JavaScript onclick 事件在移动设备上不起作用

javascript - 如何使用 onClick 事件将参数从列表项传递到函数

javascript - 将 onclick 添加到元素,但保留当前 onclick 事件

android - 理想的标记尺寸

javascript - Expo.io - 是在 expo 应用程序上运行的应用程序,可与独立应用程序一对一地比较

android - 在 Android 中检查连接是否良好