Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Xamarin谷歌地图-可接受的pin/标记颜色_C#_Google Maps_Xamarin_Google Maps Api 3_Xamarin.forms - Fatal编程技术网

C# Xamarin谷歌地图-可接受的pin/标记颜色

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.GoogleMaps。 它在iOS和Android上运行得非常好。 现在我正在研究谷歌地图的图钉/标记。 我正在尝试添加不同颜色的管脚,但并非所有颜色都有效

我现在是怎么做的:

上面的例子效果很好。但如果我将其更改为Color.Black,例如,它将不起作用,并以默认的红色显示标记。而且它在不同的平台上也有问题,在iOS、Black works和Android中都没有。没有错误出现,只显示默认的红色而不是黑色 所以我的问题是: 是否有可用作标记/针颜色的可接受颜色列表?是每种颜色都应该使用,还是只是一些预定义的颜色

另外,如何将默认图标更改为另一个图标图像?我试过使用FromBundle,但它抛出了一个错误,至少对我来说是这样。也许我做错了。它告诉我们图像需要是位图


如果可能的话,我希望避免使用自定义渲染器,因为现在它在没有任何自定义渲染的情况下工作得非常好,除了我说过的一些颜色。

如果您不喜欢使用自定义渲染器,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它不支持覆盖标记选项,它在两种情况下都很好,但有些颜色没有显示,只是其中的一些,我认为克里斯托弗·斯蒂芬的评论是正确的。但不管怎样,塔恩克斯