gpt4 book ai didi

android - 在 Xamarin Forms Custom Renderer 中将 Mapbox 添加到 Android View

转载 作者:行者123 更新时间:2023-11-30 01:36:09 26 4
gpt4 key购买 nike

我不知道如何使用 Xamarin.Forms 在 Android 上的自定义 View 渲染器中获取 Mapbox map 。这让我发疯。

在我的 PCL 中,我有一个 map View 。

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

我对 AddSubview(mapView) 的最终调用实际上不是 View 类的方法,因为它是 iOS 上的 UIView 类.这就是我被困的地方。我不知道如何显示 MapView。请帮忙。

最佳答案

正如您已经提到的,您不能调用 AddSubview,因为它是一个 iOS 方法。

Android 上,它相当于 AddView

但是 - 您正试图对 Android View 对象而不是 ViewGroup 对象执行此类操作,因此它不是可能。

首先而不是做:-

var view = new Android.Views.View(Context);

尝试直接实例化 MapView,例如:-

var view = new MapView(Context, "thisismyaccesscode");

您对 View 的 SetNativeControl 调用没有问题。

我没有尝试过 Mapbox 组件,所以我不清楚它在上面的代码中期望的确切参数类型。

但是,如果这不起作用,则执行类似以下操作:-

var view = new Android.Widget.FrameLayout(Context);

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.AddView(mapView);

SetNativeControl(view);

您还必须将第一行更改为以下内容:-

public class MapViewRenderer : ViewRenderer<Shared.Mobile.MapView, Android.Widget.FrameLayout>

关于android - 在 Xamarin Forms Custom Renderer 中将 Mapbox 添加到 Android View,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35094033/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com