由于我在Xamarin上进行基于地图的跨平台项目,而且我在缩小时需要聚焦标记。 我尝试过的事情:
我知道我可以使用自定义地图渲染器实现它,但我不能这样做。很多与地图相关的代码已经写好,我不想重写代码。那么我是否有可能获得可以在依赖服务上使用的本地地图实例。
我为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的新手。很少指导表示赞赏。
我在正确的方向吗?
提前谢谢你。抱歉我的英语
答案 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
{
...
然后,您的渲染器代码将被正确触发。