Exemple #1
0
        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);
            }
        }
Exemple #2
0
        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);
        }