【问题标题】:Monodroid Jar Binding Problems with OsmDroidOsmDroid 的 Monodroid Jar 绑定问题
【发布时间】:2013-01-16 17:46:17
【问题描述】:

我正在尝试从 OsmDroid 移植主干版本(3.0.9-SNAPSHOT:http://code.google.com/p/osmdroid/source/browse/)。以前我使用 xamarin 示例的移植版本 3.0.8。在 3.0.9 版本中解决了我面临的一个错误,所以我真的必须移植 OsmDroid 的主干版本。

我现在遇到三个错误:

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)

据我所知,这三个缺少的接口成员是 Android.Canvas 的成员。这三种方法在生成可移植代码后不移植,但在原始 jar 文件(SafeTranslatedCanvas.javaISafeCanvas.java)中可见。

如何解决 Metadata.xml 中的这些问题?

提前致谢。 你好, 法子

【问题讨论】:

  • 你已经解决了这个问题吗?

标签: mono xamarin.android porting osmdroid


【解决方案1】:

我已经设法通过添加部分类来编译 osmdroid 3.0.9 (& 3.0.10):

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);
        }
    }
}

我还必须解决另外两个与可见性有关的错误:

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

通过在 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>

我的项目现在启动并且地图可见,但它没有响应 - 它既不缩放也不滚动。我想知道你是否会有同样的结果。

【讨论】:

    【解决方案2】:

    你见过Xamarin Sample repository,其中包含来自 OsmDroid 的样本吗?

    【讨论】:

    • 正如我所写,我使用该示例与 osmdroid 3.0.8 一起使用,并成功绑定了 osmdroid 奖励包以实现路由功能。但是我需要新版本的 osmdroid 并且架构中有一些新的类和优化。我“只是”有一个问题,即从 Android.Canvas 使用的方法没有映射,尽管我得到了上述三个错误。
    猜你喜欢
    • 2013-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-09
    • 2011-05-18
    • 1970-01-01
    相关资源
    最近更新 更多