【发布时间】:2016-04-21 03:22:56
【问题描述】:
我无法弄清楚如何使用 Xamarin.Forms 在 Android 上的自定义视图渲染器中获取 Mapbox 地图。这让我发疯了。
在我的 PCL 中,我有一个地图视图。
public class MapView: View
{
public MapView() { }
}
对于 iOS,“入门”帮助已经足够接近,可以在 iOS 上运行,如下所示:
[assembly: ExportRenderer (typeof(Shared.Mobile.MapView), typeof(MapViewRenderer))]
namespace Clients.iOS
{
public class MapViewRenderer : ViewRenderer<Shared.Mobile.MapView, UIView>
{
protected override void OnElementChanged(ElementChangedEventArgs<Shared.Mobile.MapView> e)
{
base.OnElementChanged(e);
if (e.NewElement == null)
{
return;
}
var uiView = new UIView(new CoreGraphics.CGRect(0, 0, 500, 700));
SetNativeControl(uiView);
var mapView = new MapView(Control.Bounds);
mapView.SetCenterCoordinate(new CoreLocation.CLLocationCoordinate2D(40.81, -96.68), false);
mapView.SetZoomLevel(11, false);
mapView.AddAnnotation(new PointAnnotation
{
Coordinate = new CoreLocation.CLLocationCoordinate2D(40.81, -96.68),
Title = "Lincoln, NE",
Subtitle = "What-what"
});
uiView.AddSubview(mapView);
}
}
}
在 Android 方面,没有那么多。 (https://components.xamarin.com/gettingstarted/mapboxsdk)。他们正在输入 XML 和各种 Activity,但我在移动设备方面的知识目前与 Xamarin.Forms 相差不远,所以我似乎无法弥合两者之间的差距。我的 Android 渲染器如下所示:
public class MapViewRenderer : ViewRenderer<Shared.Mobile.MapView, Android.Views.View>
{
protected override void OnElementChanged(ElementChangedEventArgs<Shared.Mobile.MapView> e)
{
base.OnElementChanged(e);
var view = new Android.Views.View(Context);
SetNativeControl(view); // NullReferenceException will be thrown if the native control is not set
if (Control == null)
{
return;
}
var mapView = new MapView(Forms.Context, "thisismyaccesscode");
mapView.CenterCoordinate = new LatLng(41.885, -87.679);
mapView.ZoomLevel = 11;
mapView.SetMinimumHeight(250);
mapView.SetMinimumWidth(250);
mapView.AddMarker(new MarkerOptions().SetPosition(new LatLng(40.81, -96.68)).SetTitle("Lincoln, NE"));
view.AddSubview(mapView) // I wish this method existed
}
}
我对@987654326@ 的最后调用实际上不是View 类的方法,因为它是iOS 上的UIView 类。这就是我卡住的地方。我不知道如何显示MapView。请帮忙。
【问题讨论】:
-
您是否尝试按照链接中的建议创建 XML?这就是通常在 Android 上完成视图的方式。正如Xamarin docs 中提到的,您需要在`ÒnCreate()`` 中调用
SetContentView() -
我确实尝试过,但没有成功,我没有深入研究它在 Android 上通常是如何完成的,而是尝试使用 xamarin.forms 路线(我有点熟悉的)。我会研究一下xml方法,看看我是否有更好的运气。
-
您能否将您尝试过的内容添加到您的帖子中但没有成功?此外,Xamarin 在 [这篇文章中描述了如何在每个平台上自定义地图]。也许这会引导你走向一个方向。您是否还确保在您的平台特定代码中设置您的
ExportRenderer? -
@Andy 你有没有取得更多进展?如果您仍然卡住,为什么不发送您的解决方案,我会快速浏览一下?我的联系方式在我的个人资料中。
-
@Pete 不,我没有。我接受了你的建议,它似乎更接近了,但应用程序在某些设备上立即崩溃,研究表明这是当前的 mapbox 错误。更重要的是,mapbox sdk 不会与最新的 xamarin.forms 版本一起运行。在这一点上,我没有时间再用 mapbox 搞砸了,所以可能只用原生地图。
标签: android xamarin xamarin.forms mapbox