public Bitmap createBitmapFromLayoutWithText(Pin pin, float steps, int currentEmojiIndex) { var inflater = Android.App.Application.Context.GetSystemService(Context.LayoutInflaterService) as Android.Views.LayoutInflater; Android.Widget.RelativeLayout view = new Android.Widget.RelativeLayout(Context); inflater.Inflate(Resource.Layout.XamarinMapInfoWindow, view, true); if (customMap.OnSelect) { view.Measure(MeasureSpec.MakeMeasureSpec(0, Android.Views.MeasureSpecMode.Unspecified), MeasureSpec.MakeMeasureSpec(0, Android.Views.MeasureSpecMode.Unspecified)); view.Layout(0, 0, view.MeasuredWidth, view.MeasuredHeight); Bitmap bitmap = Bitmap.CreateBitmap(view.MeasuredWidth, view.MeasuredHeight, Bitmap.Config.Argb8888); Canvas c = new Canvas(bitmap); view.Draw(c); c.Dispose(); return(bitmap); } else { //var emoji1 = view.FindViewById<TextView>(Resource.Id.Emoji); //var cpin = pin as PinModel; //switch (currentEmojiIndex) //{ // case (0): // if (cpin.Emojis.Count > 0) // { // emoji1.Text = cpin.Emojis[0]; // emoji1.TextSize = 25; // emoji1.TranslationY = -steps; // } // break; // case (1): // if (cpin.Emojis.Count > 0) // { // emoji1.Text = cpin.Emojis[1]; // emoji1.TextSize = 25; // emoji1.TranslationY = -steps; // } // break; // case (2): // if (cpin.Emojis.Count > 1) // { // emoji1.Text = cpin.Emojis[2]; // emoji1.TextSize = 25; // emoji1.TranslationY = -steps; // } // break; // case (3): // if (cpin.Emojis.Count > 2) // { // emoji1.Text = cpin.Emojis[3]; // emoji1.TextSize = 25; // emoji1.TranslationY = -steps; // } // break; //} view.Measure(MeasureSpec.MakeMeasureSpec(0, Android.Views.MeasureSpecMode.Unspecified), MeasureSpec.MakeMeasureSpec(0, Android.Views.MeasureSpecMode.Unspecified)); view.Layout(0, 0, view.MeasuredWidth, view.MeasuredHeight); Bitmap bitmap = Bitmap.CreateBitmap(view.MeasuredWidth, view.MeasuredHeight, Bitmap.Config.Argb8888); Canvas c = new Canvas(bitmap); view.Draw(c); c.Dispose(); view.Dispose(); return(bitmap); } }
public Bitmap DrawPin(Pin p, float step, int currentEmojiIndex, float x) { BitmapFactory.Options options = new BitmapFactory.Options { InJustDecodeBounds = true, InScaled = true, InMutable = true, }; Bitmap b = BitmapFactory.DecodeResource(Resources, Resource.Id.pin, options); options.InJustDecodeBounds = false; try { if (customMap.OnSelect) { var inflater = Android.App.Application.Context.GetSystemService(Context.LayoutInflaterService) as Android.Views.LayoutInflater; Android.Widget.RelativeLayout view = new Android.Widget.RelativeLayout(Context); inflater.Inflate(Resource.Layout.XamarinMapInfoWindow, view, true); view.Measure(MeasureSpec.MakeMeasureSpec(0, Android.Views.MeasureSpecMode.Unspecified), MeasureSpec.MakeMeasureSpec(0, Android.Views.MeasureSpecMode.Unspecified)); view.Layout(0, 0, view.MeasuredWidth, view.MeasuredHeight); Bitmap bitmap = Bitmap.CreateBitmap(view.MeasuredWidth, view.MeasuredHeight, Bitmap.Config.Alpha8); Canvas c = new Canvas(bitmap); view.Draw(c); c.Dispose(); return(bitmap); } else { System.Diagnostics.Debug.WriteLine("Step: {0}", step); b = Bitmap.CreateBitmap(75, 280, Bitmap.Config.Argb8888); Canvas canvas = new Canvas(b); Rect bounds = new Rect(); Paint paint = new Paint(PaintFlags.AntiAlias); paint.TextSize = (float)(50 * App.scale); float startY = (float)(170 * App.scale); string emoji = ""; var pinModel = p as PinModel; if (pinModel != null && pinModel.Emojis.Count > 0) { emoji = pinModel.Emojis[currentEmojiIndex]; } var rand = new Random(); canvas.DrawText(emoji, x, startY * (1 - step), paint); canvas.Dispose(); paint.Dispose(); //int numEmojis = (int)Math.Ceiling( step / 0.25f ); //System.Diagnostics.Debug.WriteLine("Number of emojis to show: {0}", numEmojis); //for (int n = 0; n < numEmojis; n++) { // string emoji = ":)"; // var pinModel = p as PinModel; // if (pinModel != null && pinModel.Emojis.Count > 0) // { // emoji = pinModel.Emojis[numEmojis - n - 1]; // } // float y = (300 - 35) * (1 - n * (step - 0.25f)); // System.Diagnostics.Debug.WriteLine("y = {0}", y); // canvas.DrawText(emoji, 17, y, paint); //} } } catch (Exception e) { System.Diagnostics.Debug.WriteLine("Exception: {0}", e.Message); if (b != null) { b.Recycle(); b.Dispose(); b = null; } } return(b); }