Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xamarin Android-在触摸屏上设置标记;适用于Android的OpenStreetMap(osmdroid)“;_Android_Xamarin_Xamarin.android_Marker_Osmdroid - Fatal编程技术网

Xamarin Android-在触摸屏上设置标记;适用于Android的OpenStreetMap(osmdroid)“;

Xamarin Android-在触摸屏上设置标记;适用于Android的OpenStreetMap(osmdroid)“;,android,xamarin,xamarin.android,marker,osmdroid,Android,Xamarin,Xamarin.android,Marker,Osmdroid,我正在使用这个库: 我正在尝试将touch事件上的标记添加到我的地图视图(OSMDroid),但未能成功 我尝试了以下指南,但没有成功: 示例代码如下: OnItemGestureListener<OverlayItem> myOnItemGestureListener = new OnItemGestureListener<OverlayItem>(){ @Override public boolean onItemLongPress(int ar

我正在使用这个库:

我正在尝试将
touch
事件上的标记添加到我的地图视图(OSMDroid),但未能成功

我尝试了以下指南,但没有成功:

示例代码如下:

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;

  }
OnItemEstureListener myOnItemGestureListener
=新的OnItemTestureListener(){
@凌驾
公共布尔值(int arg0,OverlayItem arg1){
//TODO自动生成的方法存根
返回false;
}
@凌驾
公共布尔值onItemSingleTapUp(整型索引,覆盖项项){
Toast.makeText(AndroidOpenStreetMapViewActivity.this,
item.mDescription+item.mTitle+item.mGeoPoint.getLatitudeE6()+“:”
+item.mGeoPoint.getLongitudeE6(),
Toast.LENGTH_LONG).show();
返回true;
}
我正试图用C#编写上述部分的代码,您可以看到这一点。但当触摸屏设备方法OnSingleTapConfiged在类MapOverlay中调用时。要添加标记的Value MotionEvent中出现问题。发布错误。添加标记的Precision Value 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);

        }

    }
公共类映射覆盖:覆盖
{
上下文ctx;
公共映射覆盖(上下文ctx):基础(ctx)
{
_ctx=ctx;
}
受保护的MapOverlay(IntPtr javaReference,JniHandleOwnership transfer):base(javaReference,transfer)
{
}
//添加标记的错误位置MotionEvent
公共覆盖布尔OnSingleTapConfigure(运动事件e,Osmdroid.Views.MapView MapView)
{
mapView.SetBuilTinZoomControl(真);
var myMapController=mapView.Controller;
myMapController.SetZoom(2);
var myoverlaypoint=新的覆盖项(“MyTitle”、“MyText”,
//添加标记的错误位置MotionEvent
新的Osmdroid.Util.GeoPoint(e.RawX,e.RawY));
var myoverlays=新列表();
添加(myoverlaypoint);
var myItemIconOverlays=新的Osmdroid.Views.Overlay。
itemizedictionoverlay(_ctx,myoverlays,null);
mapView.Overlays.Add(myItemIconOverlays);
ScaleBarOverlay myScaleBarOverlay=新的ScaleBarOverlay(_ctx);
mapView.Overlays.Add(myScaleBarOverlay);
返回true;
}
公共覆盖无效绘制(画布c、Osmdroid.Views.MapView osmv、bool阴影)
{
}
}
[活动(Label=“@string/app_name”,Theme=“@style/AppTheme”,MainLauncher=true)]
公共类MainActivity:AppCompativeActivity
{
Osmdroid.Views.MapView MapView;
私有映射覆盖mmapOverlay=null;
创建时受保护的覆盖无效(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.layout2);
mapview=FindViewById(Resource.Id.mapView1);
var myMapController=mapview.Controller;
myMapController.SetZoom(7);
//添加标记
var myoverlayPoint=新的覆盖项(“MyTitle”、“MyText”,
新的Osmdroid.Util.GeoPoint(29.62427,52.53181));
var myoverlays=新列表();
myoverlays.Add(myoverlayPoint);
var myItemIconOverlays=新的Osmdroid.Views.Overlay。
itemizedictionoverlay(this,myoverlays,null);
mapview.Overlays.Add(myItemIconOverlays);
ScaleBarOverlay myScaleBarOverlay=新的ScaleBarOverlay(此);
mapview.Overlays.Add(myScaleBarOverlay);
//在地图中运行触摸时调用类
this.mmapOverlay=新地图覆盖(this);
mapview.Overlays.Add(mmapOverlay);
}
}

看起来类似的问题已经在这里得到了回答:

以下内容也将帮助您解决此问题:

  • 文件:

您最好指定在触摸地图时出现的错误,我是C#实现的接口OnItemTestureListener。但是当在设备方法OnItemSingle中添加标记时,请点击添加标记不起作用。编辑问题很快就会出现。谢谢