2017-11-27 18 views
0

携帯用のプロジェクトでXamarin.Forms.GoogleMapsを使用しています。 iOSとAndroidでうまく動いています。 今、私はgoogleMapのピン/マーカーに取り組んでいます。 異なる色のピンを追加しようとしていますが、すべての色が機能しているわけではありません。
Xamarin GoogleMaps - 許容可能なピン/マーカーの色

var pin = new Xamarin.Forms.GoogleMaps.Pin(); 
    pin.Label = ... etc etc etc 
    pin.Icon = BitmapDescriptorFactory.DefaultMarker(Color.Azure); 

上記の例ではうまく機能:私は今それをやっている方法

。しかし、たとえばColor.Blackに変更すると、デフォルトの赤色でマーカーが表示されません。そして、それはまた、異なるプラットフォームで問題を抱えています、iOSでは、ブラックワークスは、Androidではありません。 (エラーが表示されない、単にデフォルトは黒の代わりに赤い見せる)

だから私の質問は次のとおりです。
は、マーカー/ピン色として使用するために許容可能な色のリストはありますか?すべての色は機能するか、あらかじめ定義された色だけで済むのでしょうか?

また、デフォルトアイコンを別のアイコンイメージに変更するにはどうすればよいですか?私は "FromBundle"で試してみましたが、少なくとも私のためにエラーを投げます(おそらく私は間違っていました)。今はカスタムレンダリングなしで非常にうまく動作しています(私が言ったようにいくつかの色を除いて)。

+1

私はあなただけ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を参照してください。 –

答えて

2

カスタムレンダラーを使用しない場合、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進値の文字列属性を追加しました。

カスタマイズされた色のマップのサンプル画像を参照してください。

enter image description here

+0

私はXamarin Forms Mapsを使用していましたが、各プラットフォームのネイティブマップを使用しています.iOSマップは良くないので、Xamarin Google Maps(MarkerOptionsをオーバーライドするサポートはありません)に変更することにしました。両方でうまくいきますが、いくつかの色が現れず、ちょうどそのうちのいくつかは、クリストファー・ステファンのコメントが正しいと思います。とにかくTahnks –

関連する問題