カスタムレンダラーを使用しない場合、Xamarinフォームマップマーカー/ピンには300色以上の色しか使用できません。
しかし、マーカー/ピンの色を望むように表現したい場合は、正確なマーカー/ピンの色を取得/取得するためにXamarin Forms Custom Renderersを実装する必要があります。
Xamarinは、カスタムレンダラのドキュメントをフォームにあなたが手順を実行した後、次のメソッドをオーバーライドするには:
その後
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);
}
}
}
}
NOTES:
このサンプルコードはAndroid用です。 iOSについてはわからない
Resource.Drawable.markerには、使用できる任意のマーカーを使用できます。私はオンラインの一般的な赤い地図のマーカーをダウンロードしました。これはとにかくGetCustomBitmapDescriptorメソッドで処理されます。
resultBitmap.Recycle();はとても重要です。ビットマップは大量のメモリを必要とし、デバイスアプリケーションが停止してビットマップメモリを再利用する必要があるためです。
CustomPinはXamarin.Forms.Map.Pinクラスを拡張するクラスです。私はマーカーピンにしたい色の文字列16進値の文字列属性を追加しました。
カスタマイズされた色のマップのサンプル画像を参照してください。
私はあなただけhttps://developers.google.com/android/reference/com/google/android/gms/maps/model/上の定数として定義されている名前で色を参照できることを推測BitmapDescriptorFactory: 'BitmapDescriptorFactory.DefaultMarker(BitmapDescriptorFactory.HueCyan)'。カスタムマーカーアイコンを提供するには、https://developer.xamarin.com/guides/android/platform_features/maps_and_location/maps/part_2_-_maps_api/#Customizing_A_Markerを参照してください。 –