如何在PCL项目中集群Xamarin.Forms.GoogleMaps Pin

时间:2018-03-30 06:46:43

标签: xamarin xamarin.forms xamarin.ios xamarin.android

由于我在Xamarin上进行基于地图的跨平台项目,而且我在缩小时需要聚焦标记。 我尝试过的事情:

  • GoogleMapUtility Project。
  • 并尝试通过依赖使用GoogleMapUtility的ClusterManager。这样我就可以将一个引脚添加到集群管理器来自PCL项目。但是为了初始化集群管理器,我需要一个Native Map实例,即Android.Gms.Maps.GoogleMap。(不知道如何获取)

我知道我可以使用自定义地图渲染器实现它,但我不能这样做。很多与地图相关的代码已经写好,我不想重写代码。那么我是否有可能获得可以在依赖服务上使用的本地地图实例。

我为Map创建了CustomRenderer而没有在PCL上创建一个customMap类(继承Map类),代码如下所示。但它没有被触发。我在这做错了什么......

自定义渲染器代码:

[assembly: ExportRenderer(typeof(Map), typeof(MarkerClusterRenderer))]
namespace SamplingApp.Droid.CustomRenderers
{
    public class MarkerClusterRenderer : MapRenderer
    {
        ClusterManager _clusterManager;
        protected override void OnMarkerCreated(Pin outerItem, Marker innerItem)
        {
            base.OnMarkerCreated(outerItem, innerItem);
            AddToMarkerCluster();
        }
        protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
        {
            base.OnElementPropertyChanged(sender, e);
        }
        protected override void OnElementChanged(ElementChangedEventArgs<Map> e)
        {
            base.OnElementChanged(e);
        }

    public void AddToMarkerCluster()
    {
        _clusterManager = new ClusterManager(Android.App.Application.Context, NativeMap);
        //[do other things here]
    }

}
}
因为我是xamarin的新手。很少指导表示赞赏。 我在正确的方向吗?

提前谢谢你。抱歉我的英语

1 个答案:

答案 0 :(得分:0)

  

我为Map创建了CustomRenderer而没有在PCL上创建一个customMap类(继承Map类),代码如下所示。但它没有被触发。我在这做错了什么......

如果要自定义地图,则需要在PCL中为地图控制创建自定义类:

public class CustomMap:Map
{

}

并在xaml中使用它:

<local:CustomMap WidthRequest="320" HeightRequest="200"
        x:Name="MyMap"
        IsShowingUser="true"
        MapType="Hybrid"/>

渲染器:

[assembly:ExportRenderer(typeof(SamplingApp.CustomMap),
  typeof(MarkerClusterRenderer))]
namespace SamplingApp.Droid.CustomRenderers
{
    public class MarkerClusterRenderer:MapRenderer
    {
        ...

然后,您的渲染器代码将被正确触发。