【发布时间】:2018-07-28 17:31:18
【问题描述】:
我正在使用这个库: 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);
}
}
【问题讨论】:
-
您最好指定
touch地图时遇到的错误, -
我是接口 OnItemGestureListener 作为 C# 中的接口实现。但是当在设备方法 onItemSingleTapUp 中添加标记时,添加标记不起作用。编辑问题即将推出。谢谢
标签: android xamarin xamarin.android marker osmdroid