2017-08-07 69 views
0

这是我的自定义地图(PCL)为什么routeline不出现? xamarin形成

public class CustomMap : Map 
{ 
    public List<Position> RouteCoordinates { get; set; } 

    public CustomMap() 
    { 
     RouteCoordinates = new List<Position>(); 
    } 
} 

这是我的看法(PCL)

[XamlCompilation(XamlCompilationOptions.Compile)] 
public partial class ComoChegarView : ContentPage 
{ 
    Localizacao userLocal; 

    public ComoChegarView(double lat, double longi) 
    { 
     userLocal = new Localizacao(); 
     Task.Run(async() => await getUserLocal()).Wait(); 
     Localizacao lojaLocal = new Localizacao(); 
     lojaLocal.latitude = lat; 
     lojaLocal.longitude = longi; 

     InitializeComponent(); 

     //route 
     var customMap = new CustomMap 
     { 
      IsShowingUser = true, 
      HeightRequest = 100, 
      WidthRequest = 960, 
     }; 
      Content = customMap; 

     customMap.RouteCoordinates.Add(new Position(userLocal.latitude, userLocal.longitude)); 
     customMap.RouteCoordinates.Add(new Position(lojaLocal.latitude, lojaLocal.longitude)); 
     customMap.MoveToRegion(MapSpan.FromCenterAndRadius(new Position(userLocal.latitude, userLocal.longitude), Distance.FromMiles(1.0))); 
    } 

,这是我CustomMapRenderer(安卓)

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

using Android.App; 
using Android.Content; 
using Android.OS; 
using Android.Runtime; 
using Android.Views; 
using Android.Widget; 
using neoFly_Montana; 
using neoFly_Montana.Droid; 
using Xamarin.Forms; 
using Xamarin.Forms.Maps.Android; 
using Android.Gms.Maps; 
using Xamarin.Forms.Maps; 
using Android.Gms.Maps.Model; 

[assembly: ExportRenderer(typeof(CustomMap), typeof(CustomMapRenderer))] 
namespace neoFly_Montana.Droid 
{ 
public class CustomMapRenderer : MapRenderer, IOnMapReadyCallback 
{ 
    GoogleMap map; 
    List<Position> routeCoordinates; 

    protected override void OnElementChanged(Xamarin.Forms.Platform.Android.ElementChangedEventArgs<Map> e) 
    { 
     base.OnElementChanged(e); 

     if (e.OldElement != null) 
     { 
      // Unsubscribe 
     } 

     void OnMapReady(GoogleMap googleMap) 
     { 
      map = googleMap; 

      var polylineOptions = new PolylineOptions(); 
      polylineOptions.InvokeColor(0x66FF0000); 

      foreach (var position in routeCoordinates) 
      { 
       polylineOptions.Add(new LatLng(position.Latitude, position.Longitude)); 
      } 

      map.AddPolyline(polylineOptions); 
     } 

     if (e.NewElement != null) 
     { 
      var formsMap = (CustomMap)e.NewElement; 
      routeCoordinates = formsMap.RouteCoordinates; 

      ((MapView)Control).GetMapAsync(this); 
     } 
    } 


} 
} 

的OnMapReady没有被调用,我不知道为什么。 我正在使用xamarin.forms 地图起作用,只有线不起作用 它会画出一条沿着街道正确转向的线条,还是我需要设置应该转向的点? 我真的需要你的回答

请帮帮我!

回答

1

您已将OnMapReady置于OnElementChanged之内?这是你的问题的错字吗?尝试从OnElementChanged中解决。

如果routeline没有显示,这可能是你没有在Android的清单中添加右键:

<meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="XXXXXXXXXXXXXXX" /> 

为了得到这个键,你可以参考文档Obtaining a Google Maps API Key

+0

关键是正确的,因为地图运行完美,但现在我会尝试它,你说我。非常感谢你! –

+0

你确定,它并没有出现,因为那是在另一个里面的方法。现在它画出了路径......你知道是否有办法做到这一点自动变成街道?或者我需要始终逐点设置它?因为现在它绘制了一条不尊重街道画的直线。 谢谢 –

+0

@JoycedeLanna,自动改变街道,在你的PCL创建这个自定义地图的新实例时,约束'MapType'例如:'var customMap = new CustomMap {IsShowingUser = true,MapType = MapType.Street ,. ......}' –