android - Xamarin Android - 在“OpenStreetMap for Android (osmdroid)”中设置触摸标记
问题描述
我正在使用这个库: https ://github.com/osmdroid/osmdroid
我正在尝试将touch
事件标记添加到我的 MapView (OSMDroid),但未能成功。
我尝试使用此指南,但没有成功: http ://android-er.blogspot.com/2012/05/implement-onitemgesturelistener-on.html
示例代码如下:
OnItemGestureListener<OverlayItem> myOnItemGestureListener
= new OnItemGestureListener<OverlayItem>(){
@Override
public boolean onItemLongPress(int arg0, OverlayItem arg1) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean onItemSingleTapUp(int index, OverlayItem item) {
Toast.makeText(AndroidOpenStreetMapViewActivity.this,
item.mDescription+item.mTitle+item.mGeoPoint.getLatitudeE6() +":"
+item.mGeoPoint.getLongitudeE6(),
Toast.LENGTH_LONG).show();
return true;
}
我正在尝试用 C# 编写上面的代码,你可以看到它。但是当触摸屏设备方法 OnSingleTapConfirmed 在类 MapOverlay Called.Problem In Value MotionEvent 中添加标记。发布错误。添加标记的精确值 MotionEvent。请帮助几天解决涉及的问题
public class MapOverlay : Overlay
{
Context _ctx;
public MapOverlay(Context ctx ) : base(ctx)
{
_ctx = ctx;
}
protected MapOverlay(IntPtr javaReference, JniHandleOwnership transfer) : base(javaReference, transfer)
{
}
//the mistake Position MotionEvent For Add Marker
public override bool OnSingleTapConfirmed(MotionEvent e, Osmdroid.Views.MapView mapView)
{
mapView.SetBuiltInZoomControls(true);
var myMapController = mapView.Controller;
myMapController.SetZoom(2);
var myoverlayPointt = new OverlayItem("MyTitle", "MyText",
//the mistake Position MotionEvent For Add Marker
new Osmdroid.Util.GeoPoint(e.RawX,e.RawY));
var myoverlays = new List<OverlayItem>();
myoverlays.Add(myoverlayPointt);
var myItemIconOverlays = new Osmdroid.Views.Overlay.
ItemizedIconOverlay(_ctx, myoverlays, null);
mapView.Overlays.Add(myItemIconOverlays);
ScaleBarOverlay myScaleBarOverlay = new ScaleBarOverlay(_ctx);
mapView.Overlays.Add(myScaleBarOverlay);
return true;
}
public override void Draw(Canvas c, Osmdroid.Views.MapView osmv, bool shadow)
{
}
}
[Activity(Label = "@string/app_name", Theme = "@style/AppTheme", MainLauncher = true)]
public class MainActivity : AppCompatActivity
{
Osmdroid.Views.MapView mapview;
private MapOverlay mmapOverlay = null;
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.layout2);
mapview = FindViewById<Osmdroid.Views.MapView>(Resource.Id.mapView1);
var myMapController = mapview.Controller;
myMapController.SetZoom(7);
//Add Marker
var myoverlayPoint = new OverlayItem("MyTitle", "MyText",
new Osmdroid.Util.GeoPoint(29.62427, 52.53181));
var myoverlays = new List<OverlayItem>();
myoverlays.Add(myoverlayPoint);
var myItemIconOverlays = new Osmdroid.Views.Overlay.
ItemizedIconOverlay(this, myoverlays, null);
mapview.Overlays.Add(myItemIconOverlays);
ScaleBarOverlay myScaleBarOverlay = new ScaleBarOverlay(this);
mapview.Overlays.Add(myScaleBarOverlay);
//called class when Run Touch In Map
this.mmapOverlay = new MapOverlay(this);
mapview.Overlays.Add(mmapOverlay);
}
}
解决方案
看起来类似的问题已经在这里得到了回答:
以下也将帮助您解决问题:
- 文档: http: //osmdroid.github.io/osmdroid/Markers,-Lines-and-Polygons.html
- https://www.programcreek.com/java-api-examples/?api=org.osmdroid.bonuspack.overlays.Marker
- https://programtalk.com/java-api-usage-examples/org.osmdroid.views.overlay.Marker/
- https://help.openstreetmap.org/questions/35033/osmdroid-display-marker-onclick