我是Android开发的新手,我在为Android创建应用程序时使用osmdroid,我想通过单击地图来获得一个点,我找到了这个解决方案:
MapEventsReceiver mReceive = new MapEventsReceiver()
{
@Override
public boolean singleTapConfirmedHelper(GeoPoint p) {
Toast.makeText(getBaseContext(),p.getLatitude() + " - "+p.getLongitude(),Toast.LENGTH_LONG).show();
GeoPoint point = new GeoPoint(p.getLatitude(),p.getLongitude());
// This is the line i will explain in problem #2
Global_point = point;
return true;
}
@Override
public boolean longPressHelper(GeoPoint p) {
return false;
}
};
MapEventsOverlay OverlayEvents = new MapEventsOverlay(mReceive);
mapView.getOverlays().add(OverlayEvents);
通过这个页面,我把它放在按钮的功能Onclick
。
问题是:
1-它(点接收(不会停止,它会永远运行,当收到GeoPoint时如何停止它?
2-MapEventsReceiver是一个应该按照它定义实现的接口,所以singleTapConfirmedHelper
函数应该返回一个布尔值,我怎样才能返回通过单击接收的GeoPoint?我知道我可以定义一个全局变量并将其填充在 singleTapConfirmedHelper-function 中,但我问是否可以更改接口函数返回值。
Ps:我知道我可以通过索引来删除地图叠加层:
mapView.getOverlays().add(0,OverlayEvents);
mapView.getOverlays().remove(0);
但我不知道我应该把它放在哪里。
你应该从singleTapConfirmedHelper调用一些methot。它是匿名类,因此它可以调用创建它的类的 methos。
MapEventsReceiver mReceive = new MapEventsReceiver() {
@Override
public boolean singleTapConfirmedHelper(GeoPoint p) {
Toast.makeText(getBaseContext(),p.getLatitude() + " - "+p.getLongitude(),Toast.LENGTH_LONG).show();
onPointSelected(point);
return true;
}
//...
}
稍后,在您的活动或片段中的某个位置:
private void onPointSelected(GeoPoint p) {
//do whatever you want with the point. For example: store it in a field
this.selectedPoint = p;
//finish interaction => somehow remove or turn of particular overlay
mapView.getOverlays().remove(0);
}