如何设置某些图标而不是默认图钉?

Posted

技术标签:

【中文标题】如何设置某些图标而不是默认图钉?【英文标题】:How to set certain icon instead of default pins? 【发布时间】:2019-05-29 14:06:29 【问题描述】:

我正在尝试使用某些图标而不是地图上的默认 Xamarin.Forms 引脚。 所以我创建了继承 Pin 的 CustomisePin 类。

using Xamarin.Forms.Maps;
namespace agroNet.Tools

    public class CustomPin : Pin
    
        public string PinIcon  get; set; 
    

这是我在 ViewModel 中尝试过的

private Map _map;

        public IrrigNetViewModel(Map map)
        
            dialog = UserDialogs.Instance.Loading(AppResource.LocalizationResource.Loading);        
            TabTappedCommand = new Command((tabName) => OnTapClicked(tabName.ToString()));
            HideListOnTapCommand = new Command(HideListOnTap);
            _map = map;
            GetData();
        

这是在位置上设置引脚的方法。

public void LoadMapTab()
        

            //var irrigNetPins = new List<CustomPin>();

            foreach (var item in IrrigNetCollection)
            
                //var pins = new CustomPin
                //
                //    Label = item.StationName,
                //    Position = new Position(item.StationLatitude, item.StationLongitude),
                //    PinIcon = "satellite.png"
                //;

                _map.Pins.Add(new CustomPin
                
                    Label = item.StationName,
                    Position = new Position(item.StationLatitude, item.StationLongitude),
                    //PinIcon = P
                );
                _map.MoveToRegion(
                    MapSpan.FromCenterAndRadius(new Position(item.StationLatitude, item.StationLongitude),
                    Distance.FromKilometers(30)));

                //irrigNetPins.Add(pins);
            

            //return irrigNetPins;
        

在 LoadMapTab 下的注释行是我尝试设置的 pin 图标。

如果由于绑定上下文而重要,这里是 View 的一部分。

public partial class IrrigNetPage : ContentPage
    

        public IrrigNetPage()
        
            InitializeComponent();
            BindingContext = new IrrigNetViewModel(MainMap);
        
    

我在 Google 上找到了一些示例,例如: https://github.com/raechten/BindableMapTest https://github.com/paulpatarinski/ShouldIWashMyCar

由于某种原因,我无法事件运行它们,但我仍然尝试使用代码,无论我有什么 Pin 都是默认的,甚至不显示。

为图钉设置特定图标的简单方法是什么,是否可以仅使用图标的某些路径而不渲染地图来渲染它(因为我看到很多为自定义图钉创建服装图)。

如果它对我使用 MVVM 模式的人很重要。

【问题讨论】:

可以使用自定义渲染器显示自定义 Pin 图 @HobbyDev 你不说? :O 如果你想使用自定义渲染器,我会从我的一个项目中找到并发布代码。 @NitrusBrio 我尝试为您的要求创建一个示例项目。当页面加载期间引脚的数据可用时,我能够显示自定义引脚。只需将数据分配给页面构造函数的引脚即可。但是如果管脚数据绑定到视图模型,自定义管脚仍然为空。请参阅 Github 上的问题 github.com/xamarin/Xamarin.Forms/issues/6393。如果引脚所需的数据在地图加载时很容易获得,您可以使用来自 github issue 的项目。询问我是否需要任何帮助。 @NitrusBrio 嗨,在开发人员的指导下,我能够创建使用自定义引脚的示例项目。看看github.com/HobDev/CustomPinSample/tree/master 【参考方案1】:

官方 Xamarin 示例和文档已过时。我修改了官方自定义引脚示例,以便在 iosandroid 中使用自定义引脚。该项目托管在GitHub。

here 上的官方示例报告了一个问题。

【讨论】:

以上是关于如何设置某些图标而不是默认图钉?的主要内容,如果未能解决你的问题,请参考以下文章

android Firebase 云消息通知图标

当用户点击地图图钉时动态更改图标图像文件:谷歌地图

如何更改 ElectronJS 应用程序的默认图标?

如何设置图标而不是占位符角度2

设置多色标签栏图标而不是单色图标

如何设置 MKPinAnnotation 使图像底部指向位置而不是图像中心