Beispiel #1
0
 private static void makeEffects(PathEffect[] e, float phase)
 {
     e [0] = null;                 // no effect
     e [1] = new CornerPathEffect(10);
     e [2] = new DashPathEffect(new float[] { 10, 5, 5, 5 }, phase);
     e [3] = new PathDashPathEffect(makePathDash(), 12, phase,
                                    PathDashPathEffect.Style.ROTATE);
     e [4] = new ComposePathEffect(e [2], e [1]);
     e [5] = new ComposePathEffect(e [3], e [1]);
 }
Beispiel #2
0
        protected override void OnDraw(Canvas canvas)
        {
            base.OnDraw(canvas);

            var x           = this.GetX() + this.Resize(this._shapeView.Padding.Left);
            var y           = this.GetY() + this.Resize(this._shapeView.Padding.Top);
            var width       = base.Width - this.Resize(this._shapeView.Padding.HorizontalThickness);
            var height      = base.Height - this.Resize(this._shapeView.Padding.VerticalThickness);
            var cx          = width / 2f + this.Resize(this._shapeView.Padding.Left);
            var cy          = height / 2f + this.Resize(this._shapeView.Padding.Top);
            var strokeWidth = 0f;

            Paint strokePaint = null;

            if (this._shapeView.BorderWidth > 0 && this._shapeView.BorderColor.A > 0)
            {
                strokeWidth = this.Resize(this._shapeView.BorderWidth);

                strokePaint = new Paint(PaintFlags.AntiAlias);
                strokePaint.SetStyle(Paint.Style.Stroke);
                strokePaint.StrokeWidth = strokeWidth;
                strokePaint.StrokeCap   = Paint.Cap.Round;
                strokePaint.Color       = this._shapeView.BorderColor.ToAndroid();


                x      += strokeWidth / 2f;
                y      += strokeWidth / 2f;
                width  -= strokeWidth;
                height -= strokeWidth;
            }

            Paint fillPaint = null;

            if (this._shapeView.Color.A > 0)
            {
                fillPaint = new Paint(PaintFlags.AntiAlias);
                fillPaint.SetStyle(Paint.Style.Fill);
                fillPaint.Color = this._shapeView.Color.ToAndroid();
            }

            if (this._shapeView.CornerRadius > 0)
            {
                switch (this._shapeView.ShapeType)
                {
                case ShapeType.Star:
                case ShapeType.Triangle:
                case ShapeType.Diamond:
                case ShapeType.Path:
                    var cr = this.Resize(this._shapeView.CornerRadius);

                    var cornerPathEffect = new CornerPathEffect(cr);
                    fillPaint?.SetPathEffect(cornerPathEffect);
                    strokePaint?.SetPathEffect(cornerPathEffect);
                    break;
                }
            }

            switch (this._shapeView.ShapeType)
            {
            case ShapeType.Box:
                this.DrawBox(canvas, x, y, width, height, this._shapeView.CornerRadius, fillPaint, strokePaint);
                break;

            case ShapeType.Circle:
                this.DrawCircle(canvas, cx, cy, Math.Min(height, width) / 2f, fillPaint, strokePaint);
                break;

            case ShapeType.Oval:
                this.DrawOval(canvas, x, y, width, height, fillPaint, strokePaint);
                break;

            case ShapeType.Star:
                var outerRadius = (Math.Min(height, width) - strokeWidth) / 2f;
                var innerRadius = outerRadius * this._shapeView.RadiusRatio;

                this.DrawStar(canvas, cx, cy, outerRadius, innerRadius, this._shapeView.CornerRadius, this._shapeView.NumberOfPoints, fillPaint, strokePaint);
                break;

            case ShapeType.Triangle:
                this.DrawTriangle(canvas, x + strokeWidth / 2, y + strokeWidth / 2, width - strokeWidth, height - strokeWidth, fillPaint, strokePaint);
                break;

            case ShapeType.Diamond:
                this.DrawDiamond(canvas, x + strokeWidth / 2, y + strokeWidth / 2, width - strokeWidth, height - strokeWidth, fillPaint, strokePaint);
                break;

            case ShapeType.Heart:
                this.DrawHeart(canvas, x, y, width, height, this.Resize(this._shapeView.CornerRadius), fillPaint, strokePaint);
                break;

            case ShapeType.ProgressCircle:
                this.DrawCircle(canvas, cx, cy, Math.Min(height, width) / 2f, fillPaint, strokePaint);

                if (this._shapeView.ProgressBorderWidth > 0 && this._shapeView.ProgressBorderColor.A > 0)
                {
                    var progressStrokeWidth = this.Resize(this._shapeView.ProgressBorderWidth);

                    var progressPaint = new Paint(PaintFlags.AntiAlias);
                    progressPaint.SetStyle(Paint.Style.Stroke);
                    progressPaint.StrokeWidth = progressStrokeWidth;
                    progressPaint.Color       = this._shapeView.ProgressBorderColor.ToAndroid();

                    var deltaWidth = progressStrokeWidth - strokeWidth;

                    if (deltaWidth > 0)
                    {
                        width  -= deltaWidth;
                        height -= deltaWidth;
                    }

                    this.DrawProgressCircle(canvas, cx, cy, Math.Min(height, width) / 2f, this._shapeView.Progress, progressPaint);
                }

                break;

            case ShapeType.Path:
                this.DrawPath(canvas, this._shapeView.Points, x, y, fillPaint, strokePaint);
                break;
            }
        }