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