faiko
faiko

Reputation: 111

Monodroid Jar Binding Problems with OsmDroid

I am trying to port the trunk version from OsmDroid (3.0.9-SNAPSHOT: http://code.google.com/p/osmdroid/source/browse/). Previously I used the porting from xamarin examples for version 3.0.8. In version 3.0.9 a bug is resolved, which I am facing, so I really have to port the trunk version of OsmDroid.

I am getting three errors at the moment:

Error CS0535: 'OsmDroid.Views.SafeCanvas.SafeTranslatedCanvas' does not implement interface member 'OsmDroid.Views.SafeCanvas.ISafeCanvas.DrawColor(int)' (CS0535) (OsmDroid)
Error CS0535: 'OsmDroid.Views.SafeCanvas.SafeTranslatedCanvas' does not implement interface member 'OsmDroid.Views.SafeCanvas.ISafeCanvas.DrawColor(int, Android.Graphics.PorterDuff.Mode)' (CS0535) (OsmDroid)
Error CS0535: 'OsmDroid.Views.SafeCanvas.SafeTranslatedCanvas' does not implement interface member 'OsmDroid.Views.SafeCanvas.ISafeCanvas.Save(int)' (CS0535) (OsmDroid)

As far as I found out those three missing interface members are members of the Android.Canvas. These three methods are not ported after generation of the portable code, but are visible in the original jar File (SafeTranslatedCanvas.java and ISafeCanvas.java).

How do I solve these problems in the Metadata.xml?

Thanks in advance. greetings, faiko

Upvotes: 2

Views: 787

Answers (2)

krzysztofkarolczak
krzysztofkarolczak

Reputation: 551

I've managed to get osmdroid 3.0.9 (& 3.0.10) to compile by adding a partial class:

using Android.Graphics;

namespace Org.Osmdroid.Views.Safecanvas
{
    partial class SafeTranslatedCanvas
    {
        public void DrawColor(int color)
        {
            this.WrappedCanvas.DrawColor(new Color(color));
        }

        public void DrawColor(int color, Android.Graphics.PorterDuff.Mode mode)
        {
            this.WrappedCanvas.DrawColor(new Color(color), mode);
        }

        public int Save(int SaveFlags)
        {
            return this.WrappedCanvas.Save((Android.Graphics.SaveFlags)SaveFlags);
        }
    }
}

I also had to resolve two more errors connected with visibility:

Error   30  'OsmDroid.Views.Overlay.SafeDrawOverlay.Draw(Android.Graphics.Canvas, OsmDroid.Views.MapView, bool)': cannot change access modifiers when overriding 'public' inherited member 'OsmDroid.Views.Overlay.Overlay.Draw(Android.Graphics.Canvas, OsmDroid.Views.MapView, bool)' C:\Users\K\Desktop\LodzKieruje\LodzKieruje\OsmDroidBinding\obj\Debug\generated\src\OsmDroid.Views.Overlay.SafeDrawOverlay.cs    111 27  OsmDroid
Error   34  'OsmDroid.Views.Overlay.ScaleBarOverlay.DrawSafe(Org.Osmdroid.Views.Safecanvas.ISafeCanvas, OsmDroid.Views.MapView, bool)': cannot change access modifiers when overriding 'protected' inherited member 'OsmDroid.Views.Overlay.SafeDrawOverlay.DrawSafe(Org.Osmdroid.Views.Safecanvas.ISafeCanvas, OsmDroid.Views.MapView, bool)'  C:\Users\K\Desktop\LodzKieruje\LodzKieruje\OsmDroidBinding\obj\Debug\generated\src\OsmDroid.Views.Overlay.ScaleBarOverlay.cs    388 24  OsmDroid

This was solved by adding following lines to Metadata.xml

  <attr path="/api/package[@name='org.osmdroid.views.overlay']/class[@name='SafeDrawOverlay']/method[@name='draw']" name="visibility">public</attr>
  <attr path="/api/package[@name='org.osmdroid.views.overlay']/class[@name='ScaleBarOverlay']/method[@name='drawSafe']" name="visibility">protected</attr>

My project now launches and the map is visible however it is not responsive - it does not scale nor scroll. I wonder if you'll have the same outcome.

Upvotes: 1

Cheesebaron
Cheesebaron

Reputation: 24470

Have you seen the Xamarin Sample repository which contains a sample fro OsmDroid?

Upvotes: 0

Related Questions