Пример #1
0
        public static void SetBorder(this AView view, Context context, VisualElement element, Color color, double width)
        {
            var borderWidth = (int)context.ToPixels(width);

            switch (view.Background)
            {
            case GradientDrawable gradientDrawable:
                gradientDrawable.SetStroke(borderWidth, ColorStateList.ValueOf(color.ToAndroid()));
                break;

            case GradientStrokeDrawable gradientStrokeDrawable:
                gradientStrokeDrawable.SetStroke(borderWidth, color);
                break;

            case PaintDrawable paintDrawable:
                var paint = paintDrawable.Paint;
                paint.AntiAlias   = true;
                paint.Color       = color.ToAndroid();
                paint.StrokeWidth = borderWidth;
                paint.SetStyle(Paint.Style.Stroke);
                if (element is IGradientElement gradientElement)
                {
                    view.SetPaintGradient(gradientElement.Gradients, gradientElement.Angle);
                }
                break;

            default:
                view.Background?.Dispose();
                var newGradientDrawable = new GradientDrawable();
                newGradientDrawable.SetStroke(borderWidth, ColorStateList.ValueOf(color.ToAndroid()));
                newGradientDrawable.SetColor(element.BackgroundColor.ToAndroid());
                view.Background = newGradientDrawable;
                break;
            }
        }
Пример #2
0
        public static void SetGradient(this AView view, XGradientType type, IList <GradientStop> gradients, float angle)
        {
            if (!gradients.Any())
            {
                return;
            }

            var colors    = gradients.Select(x => (int)x.Color.ToAndroid()).ToArray();
            var positions = gradients.Select(x => x.Offset).ToArray();

            /* If positions are set, then go for PaintDrawable */
            if (!positions.All(x => Math.Abs(x) < Math.Pow(10, -10)))
            {
                view.SetPaintGradient(gradients, angle);
                return;
            }

            var constructNew = true;
            GradientDrawable gradientDrawable;

            /* Reuse existing one */
            if (view.Background is GradientDrawable oldGradientDrawable)
            {
                constructNew     = false;
                gradientDrawable = oldGradientDrawable;
            }
            else
            {
                gradientDrawable = new GradientDrawable();
            }

            gradientDrawable.SetColors(colors);
            gradientDrawable.SetOrientation(angle);

            switch (type)
            {
            case XGradientType.Radial:
                gradientDrawable.SetGradientType(AGradientType.RadialGradient);
                gradientDrawable.SetGradientRadius(view.Context.Resources.DisplayMetrics.WidthPixels);
                break;

            default:
                gradientDrawable.SetShape(ShapeType.Rectangle);
                gradientDrawable.SetGradientType(AGradientType.LinearGradient);
                break;
            }

            if (!constructNew)
            {
                return;
            }

            view.Background?.Dispose();
            view.Background = gradientDrawable;
        }