1. 将原生控件jar包转为dll
2. 将Andriod项目引入转换之后的dll文件
3. Xamarin.Form项目创建一个Page,加入传播参数的静态字段
public static BindableProperty PinsProperty = BindableProperty.Create<MapPage, IEnumerable>(p => p.Pins, default(IEnumerable)); public IEnumerable Pins { get { return (IEnumerable)GetValue(PinsProperty); } set { this.SetValue(PinsProperty, value); } }
4. Xamarin.Android项目中创建一个ViewRender,继承PageRenderer。重写OnElementChanged(ElementChangedEventArgs<Page> e)方法。
protected override void OnElementChanged(ElementChangedEventArgs<Page> e) { base.OnElementChanged(e); if (this.Context == null) return; mapPage = e.NewElement as MapPage; layout1 = new LinearLayout(this.Context); this.AddView(layout1); mapView = new MapView(this.Context); mapView.Map.MyLocationEnabled = true; #region 比例 MapStatus.Builder builder = new MapStatus.Builder(); builder.Zoom(12.0f); mapView.Map.SetMapStatus(MapStatusUpdateFactory.NewMapStatus(builder.Build())); #endregion mapPage.Pins.Cast<Models.Station>().ToList().ForEach(x => { LatLng point = new LatLng(x.Longitude, x.Latitude); //构建Marker图标 BitmapDescriptor bitmap_off = BitmapDescriptorFactory .FromResource(Resource.Drawable.Map_OffLine); BitmapDescriptor bitmap_on = BitmapDescriptorFactory .FromResource(Resource.Drawable.Map_OnLine); //构建MarkerOption,用于在地图上添加Marker OverlayOptions option = new MarkerOptions().InvokeIcon(bitmap_off); layout1.AddView(mapView); }