如何读取一次地理点,然后返回普通视图?



我是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);
}

相关内容

  • 没有找到相关文章

最新更新