I'm posting this here because I don't know where else to post it.  It may prove 
useful to someone.  I had a hard time figuring out what to place in 
Metadata.xml because the documentation isn't the greatest.  There may be a 
better way to do this.  There are also a bunch of cleanups that could be 
performed (ie changing getX() to a property get but I couldn't figure out how 
to do that).


1.       Setup your project as specified in 
http://docs.xamarin.com/android/tutorials/Binding_a_Java_Library_%28.jar%29 (I 
called it OsmDroid)

2.       Add the following Jars:

a.       osmdroid-android-3.0.8 as the input jar

b.      httpmime-4.2.1 as reference jar

c.       osmdroid-third-party-3.0.8 as reference jar

d.      slf4j-android-1.5.8 as reference jar

3.       In EnumMethods.xml you will want the following:

  <mapping jni-interface="org/osmdroid/api/IMapView">
    <method jni-name="setBackgroundColor" parameter="p0" 
clr-enum-type="Android.Graphics.Color" />
  </mapping>

  <mapping jni-interface="org/osmdroid/api/IMyLocationOverlay">
    <method jni-name="onStatusChanged" parameter="p1" 
clr-enum-type="Android.Locations.Availability" />
  </mapping>


4.       Metadata.xml:


  <attr 
path="/api/package[@name='org.osmdroid.tileprovider.modules']/class[@name='MapTileModuleProviderBase.TileLoader']"
 name="visibility">
    public
  </attr>
  <attr 
path="/api/package[@name='org.osmdroid.tileprovider.modules']/class[@name='MapTileModuleProviderBase.TileLoader']/method[@name='loadTile']"
 name="visibility">
    public
  </attr>

  <attr 
path="/api/package[@name='org.osmdroid.tileprovider']/class[@name='MapTileProviderBase.ScaleTileLooper']/method[@name='handleTile']"
 name="visibility">
    public
  </attr>
  <attr 
path="/api/package[@name='org.osmdroid.tileprovider']/class[@name='MapTileProviderBase.ZoomInTileLooper']/method[@name='handleTile']"
 name="visibility">
    public
  </attr>
  <attr 
path="/api/package[@name='org.osmdroid.tileprovider']/class[@name='MapTileProviderBase.ZoomOutTileLooper']/method[@name='handleTile']"
 name="visibility">
    public
  </attr>


  <!-- Draw() seems to be public for android so we need to be consistent about 
it.  C# doesn't like to mix visibility during inheritance. -->
  <attr 
path="/api/package[@name='org.osmdroid.views.overlay']/class[@name='Overlay']/method[@name='draw']"
 name="visibility">
    public
  </attr>
  <attr 
path="/api/package[@name='org.osmdroid.views.overlay']/class[@name='TilesOverlay']/method[@name='draw']"
 name="visibility">
    public
  </attr>
  <attr 
path="/api/package[@name='org.osmdroid.views.overlay']/class[@name='PathOverlay']/method[@name='draw']"
 name="visibility">
    public
  </attr>

  <remove-node 
path="/api/package[@name='org.osmdroid.tileprovider.tilesource']/class[@name='CloudmadeTileSource']"
 />

  <!-- Return IMapController in MapView.Controller so that we match IMapView. 
-->
  <attr 
path="/api/package[@name='org.osmdroid.views']/class[@name='MapView']/method[@name='getController']"
 name="managedReturn">
    Org.Osmdroid.Api.IMapController
  </attr>

  <!-- We need to rename class MapView.Projection because it conflicts with a 
property of the same name -->
  <attr 
path="/api/package[@name='org.osmdroid.views']/class[@name='MapView.Projection']"
 name="managedName">
    MapView.ProjectionImpl
  </attr>

  <!-- Change return type to match IMapView.Projection property return type -->
  <attr 
path="/api/package[@name='org.osmdroid.views']/class[@name='MapView']/method[@name='getProjection']"
 name="managedReturn">
    Org.Osmdroid.Api.IProjection
  </attr>



This should get you building and you can reference the OsmDroid project in your 
application (you don't need to use a MapActivity, a regular one works just 
fine) and it will work.

Jeremy
_______________________________________________
Monodroid mailing list
[email protected]

UNSUBSCRIBE INFORMATION:
http://lists.ximian.com/mailman/listinfo/monodroid

Reply via email to