I am using this library : https://github.com/osmdroid/osmdroid
I am trying to add marker on touch
event to my MapView (of OSMDroid), but could not succeed.
I tried with this guidelines, but no succeess: http://android-er.blogspot.com/2012/05/implement-onitemgesturelistener-on.html
The sample code is below:
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;
}
I am trying to code above section in C# which you can see blow. But When Touch In screen Device Method OnSingleTapConfirmed In Class MapOverlay Called.Problem In Value MotionEvent That To Add Marker. Postion The Mistake.Precision Value MotionEvent For Add Marker.Please Helps few days Solved Problem involved
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);
}
}