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);
}
}
看起来类似的问题已经在这里得到了回答:
- 文件: