protected override void OnElementChanged(ElementChangedEventArgs <StackLayout> e)
        {
            base.OnElementChanged(e);

            if (e.OldElement != null || Element == null)
            {
                return;
            }

            try
            {
                if (!(e.NewElement is GradientLayout stack))
                {
                    return;
                }

                Colors = stack.Colors;
                Mode   = stack.Mode;

                UpdateBackgroundColor();
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine(@"ERROR:", ex.Message);
            }
        }
Example #2
0
        private GradientDrawable.Orientation ToJavaOrintation(GradientColorStackMode orintatinColors)
        {
            switch (orintatinColors)
            {
            case GradientColorStackMode.BlTr:
                return(GradientDrawable.Orientation.BlTr);

            case GradientColorStackMode.BottomTop:
                return(GradientDrawable.Orientation.BottomTop);

            case GradientColorStackMode.BrTl:
                return(GradientDrawable.Orientation.BrTl);

            case GradientColorStackMode.LeftRight:
                return(GradientDrawable.Orientation.LeftRight);

            case GradientColorStackMode.RightLeft:
                return(GradientDrawable.Orientation.RightLeft);

            case GradientColorStackMode.TlBr:
                return(GradientDrawable.Orientation.TlBr);

            case GradientColorStackMode.TopBottom:
                return(GradientDrawable.Orientation.TopBottom);

            case GradientColorStackMode.TrBl:
                return(GradientDrawable.Orientation.TrBl);

            default:
                throw new Exception("Wrong value");
            }
        }
Example #3
0
        protected override void OnElementChanged(ElementChangedEventArgs <StackLayout> e)
        {
            base.OnElementChanged(e);

            if (e.OldElement != null || Element == null)
            {
                return;
            }

            try
            {
                if (e.NewElement is StackLayoutCustom layout)
                {
                    //Colors = layout.Colors;
                    Mode         = layout.Mode;
                    ThirdColor   = layout.ThirdColor;
                    FirstColor   = layout.FirstColor;
                    SecoundColor = layout.SecoundColor;
                }
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine(@"ERROR:", ex.Message);
            }
        }
        protected override void OnElementChanged(ElementChangedEventArgs <StackLayout> e)
        {
            base.OnElementChanged(e);

            if (e.OldElement != null || Element == null)
            {
                return;
            }

            try
            {
                var layout = (GradientLayout)e.NewElement;

                Colors = layout.Colors;
                Mode   = layout.Mode;
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine(@"ERROR:", ex.Message);
            }
        }
Example #5
0
        protected override void OnElementChanged(ElementChangedEventArgs <Frame> e)
        {
            base.OnElementChanged(e);

            if (e.OldElement != null || Element == null)
            {
                return;
            }

            try
            {
                if (e.NewElement is GradientColorContent layout)
                {
                    Colors = layout.Colors;
                    Mode   = layout.Mode;
                }
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine(@"ERROR:", ex.Message);
            }
        }
Example #6
0
        protected override void DispatchDraw(global::Android.Graphics.Canvas canvas)
        {
            GradientLayout layout = (GradientLayout)this.Element;

            Color[] Colors = layout.Colors;
            GradientColorStackMode Mode = layout.Mode;

            int[] colors = new int[Colors.Length];

            for (int i = 0, l = Colors.Length; i < l; i++)
            {
                colors[i] = Colors[i].ToAndroid().ToArgb();
            }

            // temporary workaround for Android 9 PIE
            if (Android.OS.Build.VERSION.SdkInt > Android.OS.BuildVersionCodes.O)
            {
                GradientDrawable.Orientation orientation;

                switch (Mode)
                {
                default:
                case GradientColorStackMode.ToRight:
                    orientation = GradientDrawable.Orientation.LeftRight;
                    break;

                case GradientColorStackMode.ToTop:
                    orientation = GradientDrawable.Orientation.BottomTop;
                    break;

                case GradientColorStackMode.ToBottom:
                    orientation = GradientDrawable.Orientation.TopBottom;
                    break;

                case GradientColorStackMode.ToTopLeft:
                    orientation = GradientDrawable.Orientation.BrTl;
                    break;

                case GradientColorStackMode.ToTopRight:
                    orientation = GradientDrawable.Orientation.BlTr;
                    break;

                case GradientColorStackMode.ToBottomLeft:
                    orientation = GradientDrawable.Orientation.TrBl;
                    break;

                case GradientColorStackMode.ToBottomRight:
                    orientation = GradientDrawable.Orientation.TlBr;
                    break;
                }

                var gradient2 = new GradientDrawable(orientation, colors);
                ViewCompat.SetBackground(this, gradient2);
                base.DispatchDraw(canvas);
                return;
            }

            Android.Graphics.LinearGradient gradient;
            switch (Mode)
            {
            default:
            case GradientColorStackMode.ToRight:
                gradient = new Android.Graphics.LinearGradient(0, 0, Width, 0, colors, null, Android.Graphics.Shader.TileMode.Mirror);
                break;

            case GradientColorStackMode.ToLeft:
                gradient = new Android.Graphics.LinearGradient(Width, 0, 0, 0, colors, null, Android.Graphics.Shader.TileMode.Mirror);
                break;

            case GradientColorStackMode.ToTop:
                gradient = new Android.Graphics.LinearGradient(0, Height, 0, 0, colors, null, Android.Graphics.Shader.TileMode.Mirror);
                break;

            case GradientColorStackMode.ToBottom:
                gradient = new Android.Graphics.LinearGradient(0, 0, 0, Height, colors, null, Android.Graphics.Shader.TileMode.Mirror);
                break;

            case GradientColorStackMode.ToTopLeft:
                gradient = new Android.Graphics.LinearGradient(Width, Height, 0, 0, colors, null, Android.Graphics.Shader.TileMode.Mirror);
                break;

            case GradientColorStackMode.ToTopRight:
                gradient = new Android.Graphics.LinearGradient(0, Height, Width, 0, colors, null, Android.Graphics.Shader.TileMode.Mirror);
                break;

            case GradientColorStackMode.ToBottomLeft:
                gradient = new Android.Graphics.LinearGradient(Width, 0, 0, Height, colors, null, Android.Graphics.Shader.TileMode.Mirror);
                break;

            case GradientColorStackMode.ToBottomRight:
                gradient = new Android.Graphics.LinearGradient(0, 0, Width, Height, colors, null, Android.Graphics.Shader.TileMode.Mirror);
                break;
            }

            var paint = new Android.Graphics.Paint()
            {
                Dither = true,
            };

            paint.SetShader(gradient);
            canvas.DrawPaint(paint);
            base.DispatchDraw(canvas);
        }