C# Xamarin谷歌地图-可接受的pin/标记颜色
我正在便携式项目中使用Xamarin.Forms.GoogleMaps。 它在iOS和Android上运行得非常好。 现在我正在研究谷歌地图的图钉/标记。 我正在尝试添加不同颜色的管脚,但并非所有颜色都有效 我现在是怎么做的: 上面的例子效果很好。但如果我将其更改为Color.Black,例如,它将不起作用,并以默认的红色显示标记。而且它在不同的平台上也有问题,在iOS、Black works和Android中都没有。没有错误出现,只显示默认的红色而不是黑色 所以我的问题是: 是否有可用作标记/针颜色的可接受颜色列表?是每种颜色都应该使用,还是只是一些预定义的颜色 另外,如何将默认图标更改为另一个图标图像?我试过使用FromBundle,但它抛出了一个错误,至少对我来说是这样。也许我做错了。它告诉我们图像需要是位图C# Xamarin谷歌地图-可接受的pin/标记颜色,c#,google-maps,xamarin,google-maps-api-3,xamarin.forms,C#,Google Maps,Xamarin,Google Maps Api 3,Xamarin.forms,我正在便携式项目中使用Xamarin.Forms.GoogleMaps。 它在iOS和Android上运行得非常好。 现在我正在研究谷歌地图的图钉/标记。 我正在尝试添加不同颜色的管脚,但并非所有颜色都有效 我现在是怎么做的: 上面的例子效果很好。但如果我将其更改为Color.Black,例如,它将不起作用,并以默认的红色显示标记。而且它在不同的平台上也有问题,在iOS、Black works和Android中都没有。没有错误出现,只显示默认的红色而不是黑色 所以我的问题是: 是否有可用作标记/
如果可能的话,我希望避免使用自定义渲染器,因为现在它在没有任何自定义渲染的情况下工作得非常好,除了我说过的一些颜色。如果您不喜欢使用自定义渲染器,Xamarin Forms Map markers/Pin只有300多种颜色可供使用 但是,如果您希望按自己的意愿表示标记/插针颜色,则需要实现以获得/捕获所需的准确标记/插针颜色 按照Xamarin Forms自定义渲染器文档中的步骤操作后,重写以下方法:
protected override MarkerOptions CreateMarker(Pin pin)
{
CustomPin customPin = (CustomPin)pin;
var marker = new MarkerOptions();
marker.SetPosition(new LatLng(pin.Position.Latitude, pin.Position.Longitude));
marker.SetTitle(pin.Label);
marker.SetSnippet(pin.Address);
marker.SetIcon(GetCustomBitmapDescriptor(customPin.Color));
return marker;
}
然后,我创建了以下方法,该方法将对标记/引脚颜色进行实际更改,这些颜色将与您的RGB/十六进制颜色代码中的颜色完全相同:
private BitmapDescriptor GetCustomBitmapDescriptor(string text)
{
using (Paint paint = new Paint(PaintFlags.AntiAlias))
{
using (Rect bounds = new Rect())
{
using (Bitmap baseBitmap = BitmapFactory.DecodeResource(Resources, Resource.Drawable.marker))
{
Bitmap resultBitmap = Bitmap.CreateBitmap(baseBitmap, 0, 0, baseBitmap.Width - 1, baseBitmap.Height - 1);
Paint p = new Paint();
ColorFilter filter = new PorterDuffColorFilter(Android.Graphics.Color.ParseColor(text), PorterDuff.Mode.SrcAtop);
p.SetColorFilter(filter);
Canvas canvas = new Canvas(resultBitmap);
canvas.DrawBitmap(resultBitmap, 0, 0, p);
Bitmap scaledImage = Bitmap.CreateScaledBitmap(resultBitmap, 94, 150, false);
BitmapDescriptor icon = BitmapDescriptorFactory.FromBitmap(scaledImage);
resultBitmap.Recycle();
return (icon);
}
}
}
}
注:
此示例代码仅适用于Android。对于iOS不确定
Resource.Drawable.marker可以是您可以使用的任何标记。我刚刚在网上下载了一个通用的红色地图标记。无论如何,GetCustomBitmapDescriptor方法都会覆盖它
结果bitmap.Recycle;这是非常重要的。因为位图占用大量内存,并且设备应用程序可能会暂停,所以需要重用位图内存
CustomPin是扩展Xamarin.Forms.Map.Pin类的一个类。我添加了一个字符串属性,用于标记pin所需颜色的字符串十六进制值
请参见具有自定义颜色的地图示例图像
如果不希望使用自定义渲染器,Xamarin表单贴图标记/图钉只有300多种颜色可供使用 但是,如果您希望按自己的意愿表示标记/插针颜色,则需要实现以获得/捕获所需的准确标记/插针颜色 按照Xamarin Forms自定义渲染器文档中的步骤操作后,重写以下方法:
protected override MarkerOptions CreateMarker(Pin pin)
{
CustomPin customPin = (CustomPin)pin;
var marker = new MarkerOptions();
marker.SetPosition(new LatLng(pin.Position.Latitude, pin.Position.Longitude));
marker.SetTitle(pin.Label);
marker.SetSnippet(pin.Address);
marker.SetIcon(GetCustomBitmapDescriptor(customPin.Color));
return marker;
}
然后,我创建了以下方法,该方法将对标记/引脚颜色进行实际更改,这些颜色将与您的RGB/十六进制颜色代码中的颜色完全相同:
private BitmapDescriptor GetCustomBitmapDescriptor(string text)
{
using (Paint paint = new Paint(PaintFlags.AntiAlias))
{
using (Rect bounds = new Rect())
{
using (Bitmap baseBitmap = BitmapFactory.DecodeResource(Resources, Resource.Drawable.marker))
{
Bitmap resultBitmap = Bitmap.CreateBitmap(baseBitmap, 0, 0, baseBitmap.Width - 1, baseBitmap.Height - 1);
Paint p = new Paint();
ColorFilter filter = new PorterDuffColorFilter(Android.Graphics.Color.ParseColor(text), PorterDuff.Mode.SrcAtop);
p.SetColorFilter(filter);
Canvas canvas = new Canvas(resultBitmap);
canvas.DrawBitmap(resultBitmap, 0, 0, p);
Bitmap scaledImage = Bitmap.CreateScaledBitmap(resultBitmap, 94, 150, false);
BitmapDescriptor icon = BitmapDescriptorFactory.FromBitmap(scaledImage);
resultBitmap.Recycle();
return (icon);
}
}
}
}
注:
此示例代码仅适用于Android。对于iOS不确定
Resource.Drawable.marker可以是您可以使用的任何标记。我刚刚在网上下载了一个通用的红色地图标记。无论如何,GetCustomBitmapDescriptor方法都会覆盖它
结果bitmap.Recycle;这是非常重要的。因为位图占用大量内存,并且设备应用程序可能会暂停,所以需要重用位图内存
CustomPin是扩展Xamarin.Forms.Map.Pin类的一个类。我添加了一个字符串属性,用于标记pin所需颜色的字符串十六进制值
请参见具有自定义颜色的地图示例图像
我猜您只能按名称引用在:BitmapDescriptorFactory.DefaultMarkerBitmapDescriptorFactory.HueCyan上定义为常量的颜色。要提供自定义标记图标,请参考。我想您只能通过名称引用颜色,这些颜色在:BitmapDescriptorFactory.DefaultMarkerBitmapDescriptorFactory.HueCyan上定义为常量。要提供自定义标记图标,请参阅。我使用的是Xamarin Forms Maps,但它使用的是每个平台的本机地图,而iOS地图不好,因此我决定改为Xamarin Google Maps,它不支持覆盖标记选项,在这两种情况下都很好,但有些颜色不显示,只是其中一些颜色,我认为克里斯托弗·斯蒂芬的评论是正确的。但是Tahnks无论如何我使用的是Xamarin Forms Maps,但是它使用的是每个平台的本地地图,而iOS地图不好,所以我决定改为Xamarin Google Maps它不支持覆盖标记选项,它在两种情况下都很好,但有些颜色没有显示,只是其中的一些,我认为克里斯托弗·斯蒂芬的评论是正确的。但不管怎样,塔恩克斯