public IBrush LoadLinearBrush(AGS.API.Point point1, AGS.API.Point point2, AGS.API.Color color1, AGS.API.Color color2) { var paint = AndroidBrush.CreateTextPaint(); LinearGradient gradient = new LinearGradient (point1.X, point1.Y, point2.X, point2.Y, color1.Convert(), color2.Convert(), Shader.TileMode.Clamp); paint.SetShader(gradient); return new AndroidBrush (paint); }
protected override void DispatchDraw (Canvas canvas) { base.DispatchDraw (canvas); if (FadeLength > 0) { var isHoriz = Orientation == Orientation.Horizontal; fadeRect.Right = canvas.Width; fadeRect.Bottom = canvas.Height; if (isHoriz) { // On the right fadeRect.Left = canvas.Width - FadeLength; fadeRect.Top = 0; } else { // On the bottom fadeRect.Left = 0; fadeRect.Top = canvas.Height - FadeLength; } var gradient = new LinearGradient ( fadeRect.Left, fadeRect.Top, isHoriz ? fadeRect.Right : fadeRect.Left, isHoriz ? fadeRect.Top : fadeRect.Bottom, new Color (255, 255, 255, 255), new Color (255, 255, 255, 0), Shader.TileMode.Clamp); fadePaint.SetShader (gradient); canvas.DrawRect (fadeRect, fadePaint); } }
public object Create(Color startColor, Color endColor, PointF startPoint, PointF endPoint) { var shader = new ag.LinearGradient(startPoint.X, startPoint.Y, endPoint.X, endPoint.Y, startColor.ToAndroid(), endColor.ToAndroid(), // is this correct? ag.Shader.TileMode.Clamp); var paint = new ag.Paint(); paint.SetShader(shader); return new BrushObject { Paint = paint }; // TODO: initial matrix }
private void InvalidateGradient () { if (gradientColor == null) { return; } var opaqueColor = gradientColor.Value; var transparentColor = new Color ((int)opaqueColor.R, opaqueColor.G, opaqueColor.B, 0); var gradient = new LinearGradient ( Bounds.Left, Bounds.Top, Bounds.Right, Bounds.Top, transparentColor, opaqueColor, Shader.TileMode.Clamp); paint.SetShader (gradient); }
protected override void DispatchDraw(Canvas canvas) { LinearGradient gradient = null; gradient = new Android.Graphics.LinearGradient( 0, 0, Width, 0, ((GradientButton)Element).StartColor.ToAndroid(), ((GradientButton)Element).EndColor.ToAndroid(), Android.Graphics.Shader.TileMode.Mirror); var paint = new Android.Graphics.Paint() { Dither = true, }; paint.SetShader(gradient); canvas.DrawPaint(paint); base.DispatchDraw(canvas); }
// protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e) // { // base.OnElementPropertyChanged(sender, e); // if (e.PropertyName == GradientColorStack.HorizontalTextAlignmentProperty.PropertyName) // { // SetTextAlignment(); // } // } // public void SetTextAlignment() // { // Control.Gravity = Element.HorizontalTextAlignment.ToHorizontalGravityFlags(); // } protected override void DispatchDraw(Canvas canvas) { LinearGradient gradient = null; // For Horizontal Gradient if (((GradientColorStack)Element).GradientColorOrientation == GradientColorStack.GradientOrientation.Horizontal) { gradient = new Android.Graphics.LinearGradient(0, 0, Width, 0, ((GradientColorStack)Element).StartColor.ToAndroid(), ((GradientColorStack)Element).EndColor.ToAndroid(), Android.Graphics.Shader.TileMode.Mirror); } //For Veritical Gradient if (((GradientColorStack)Element).GradientColorOrientation == GradientColorStack.GradientOrientation.Vertical) { gradient = new Android.Graphics.LinearGradient(0, 0, 0, Height, ((GradientColorStack)Element).StartColor.ToAndroid(), ((GradientColorStack)Element).EndColor.ToAndroid(), Android.Graphics.Shader.TileMode.Mirror); } var paint = new Android.Graphics.Paint() { Dither = true, }; paint.SetShader(gradient); canvas.DrawPaint(paint); base.DispatchDraw(canvas); }
private void AddBrushPaint(Paint paint, BaseBrush brush, Rect frame) { paint.SetStyle(Paint.Style.Fill); var sb = brush as SolidBrush; if (sb != null) { paint.SetARGB(sb.Color.A, sb.Color.R, sb.Color.G, sb.Color.B); return; } var lgb = brush as LinearGradientBrush; if (lgb != null) { var n = lgb.Stops.Count; if (n >= 2) { var locs = new float[n]; var comps = new int[n]; for (var i = 0; i < n; i++) { var s = lgb.Stops[i]; locs[i] = (float) s.Offset; comps[i] = s.Color.Argb; } var p1 = lgb.Absolute ? lgb.Start : frame.Position + lgb.Start*frame.Size; var p2 = lgb.Absolute ? lgb.End : frame.Position + lgb.End*frame.Size; var lg = new LinearGradient( (float) p1.X, (float) p1.Y, (float) p2.X, (float) p2.Y, comps, locs, Shader.TileMode.Clamp); paint.SetShader(lg); } return; } var rgb = brush as RadialGradientBrush; if (rgb != null) { var n = rgb.Stops.Count; if (n >= 2) { var locs = new float[n]; var comps = new int[n]; for (var i = 0; i < n; i++) { var s = rgb.Stops[i]; locs[i] = (float) s.Offset; comps[i] = s.Color.Argb; } var p1 = rgb.GetAbsoluteCenter(frame); var r = rgb.GetAbsoluteRadius(frame); var rg = new RadialGradient( (float) p1.X, (float) p1.Y, (float) r.Max, comps, locs, Shader.TileMode.Clamp); paint.SetShader(rg); } return; } throw new NotSupportedException("Brush " + brush); }
private void CustomDispatchDraw(Canvas canvas) { try { this.StartColor = stack.StartColor; this.EndColor = stack.EndColor; this.gradientStyle = stack.GradientDirection; if (_path != null) { int height = Height; int width = Width; if (gradientStyle == GradientStyle.Vertical) { width = 0; } else if (gradientStyle == GradientStyle.Horizontal) { height = 0; } else { height = 0; } var gradient = new Android.Graphics.LinearGradient(0, 0, width, height, this.StartColor.ToAndroid(), this.EndColor.ToAndroid(), Android.Graphics.Shader.TileMode.Mirror); var paint = new Android.Graphics.Paint() { Dither = true, }; paint.SetShader(gradient); canvas.Save(); canvas.ClipPath(_path); canvas.DrawPaint(paint); try { if (stack.HasBorderColor == true) { var borderPaint = new Paint(); borderPaint.AntiAlias = true; borderPaint.StrokeWidth = 2; borderPaint.SetStyle(Paint.Style.Stroke); borderPaint.Color = stack.BorderColor.ToAndroid();//global::Android.Graphics.Color.White; canvas.DrawPath(_path, borderPaint); } } catch (Exception ex) { var msg = ex.Message + "\n" + ex.StackTrace; System.Diagnostics.Debug.WriteLine(msg); } canvas.Restore(); } } catch (Exception ex) { var msg = ex.Message + "\n" + ex.StackTrace; System.Diagnostics.Debug.WriteLine(msg); } }
private void PrepareFold(FoldingLayoutOrientation orientation, float anchorFactor, int numberOfFolds) { _src = new float[NumOfPolyPoints]; _dst = new float[NumOfPolyPoints]; _dstRect = new Rect(); _foldFactor = 0; _previousFoldFactor = 0; _isFoldPrepared = false; _solidShadow = new Paint(); _gradientShadow = new Paint(); Orientation = orientation; _isHorizontal = Orientation == FoldingLayoutOrientation.Horizontal; if (_isHorizontal) _shadowLinearGradient = new LinearGradient(0, 0, ShadingFactor, 0, Color.Black, Color.Transparent, Shader.TileMode.Clamp); else _shadowLinearGradient = new LinearGradient(0, 0, 0, ShadingFactor, Color.Black, Color.Transparent, Shader.TileMode.Clamp); _gradientShadow.SetStyle(Paint.Style.Fill); _gradientShadow.SetShader(_shadowLinearGradient); _shadowGradientMatrix = new Matrix(); _anchorFactor = anchorFactor; _numberOfFolds = numberOfFolds; _originalWidth = MeasuredWidth; _originalHeight = MeasuredHeight; _foldRectArray = new Rect[_numberOfFolds]; _matrix = new Matrix[_numberOfFolds]; for (var x = 0; x < _numberOfFolds; x++) _matrix[x] = new Matrix(); var h = _originalHeight; var w = _originalWidth; if (Build.VERSION.SdkInt == BuildVersionCodes.JellyBeanMr2 && h != 0 && w != 0) { _fullBitmap = Bitmap.CreateBitmap(w, h, Bitmap.Config.Argb8888); var canvas = new Canvas(_fullBitmap); GetChildAt(0).Draw(canvas); } var delta = (int) Math.Round(_isHorizontal ? ((float) w) / _numberOfFolds : ((float) h) / _numberOfFolds); for (var i = 0; i < _numberOfFolds; i++) { if (_isHorizontal) { var deltap = (i + 1) * delta > w ? w - i * delta : delta; _foldRectArray[i] = new Rect(i * delta, 0, i * delta + deltap, h); } else { var deltap = (i + 1) * delta > h ? h - i * delta : delta; _foldRectArray[i] = new Rect(0, i * delta, w, i * delta + deltap); } } if (_isHorizontal) { _foldMaxHeight = h; _foldMaxWidth = delta; } else { _foldMaxHeight = delta; _foldMaxWidth = w; } _isFoldPrepared = true; }
// Update the main field colors depending on the current selected hue private void UpdateMainColors(Color color) { mBaseColor = color; int baseRed = mBaseColor.R; int baseGreen = mBaseColor.G; int baseBlue = mBaseColor.B; // draws the NUMBER_OF_GRADIENTS into a bitmap for later use int[] colors = new int[2]; colors[1] = Color.Black; for (int x = 0; x < 256; ++x) { colors[0] = Color.Rgb(255 - (255 - baseRed) * x / 255, 255 - (255 - baseGreen) * x / 255, 255 - (255 - baseBlue) * x / 255); Shader gradientShader = new LinearGradient(0, 0, 0, 256, colors, null, Shader.TileMode.Clamp); mGradientsPaint.SetShader(gradientShader); mPreRenderingCanvas.DrawLine(x, 0, x, 256, mGradientsPaint); } }
protected override bool DrawChild(Canvas canvas, global::Android.Views.View child, long drawingTime) { var box = (GradientContentView)Element; //var radius = Math.Min(box.Width, Height) / 2; //var strokeWidth = 10; //radius -= strokeWidth / 2; ////Create path to clip //var path = new Path(); //path.AddRoundRect(0,0,0,0, (float)box.Width, (float)box.Height, Path.Direction.Ccw); //canvas.Save(); //canvas.ClipPath(path); //var result = base.DrawChild(canvas, child, drawingTime); //canvas.Restore(); //canvas.S //// Create path for circle border //path = new Path(); //path.AddCircle(Width / 2, Height / 2, radius, Path.Direction.Ccw); ////var paint = new Paint(); ////paint.AntiAlias = true; ////paint.StrokeWidth = 5; ////paint.SetStyle(Paint.Style.Stroke); ////paint.Color = Android.Graphics.Color.ParseColor(((ImageCircle)Element).BorderColor); //canvas.DrawPath(path, paint); ////Properly dispose //paint.Dispose(); //path.Dispose(); //return result; //var path = new RoundRectShape(new float[] { 8, 8, 8, 8, 8, 8, 8, 8 }, null, null); var path = new Path(); path.AddRoundRect(new RectF(0, 0, Width, Height), box.CornerRadius, box.CornerRadius, Path.Direction.Ccw); double width = 0; double height = 0; if (box.Orientation == GradientOrientation.Horizontal) { width = Width; } else { height = Height; } // var gradientDrawable = new GradientDrawable(GradientDrawable.Orientation.BlTr, ); //var gradient = new Android.Graphics.LinearGradient((float)box.StartPointX, (float)box.StartPointY, (float)box.EndPointX, (float)box.EndPointY, float StartPointX, StartPointY, EndPointX, EndPointY = 0; StartPointX = ((float)Width * (float)box.StartPointX); StartPointY = ((float)Height * (float)box.StartPointY); EndPointX = ((float)Width * (float)box.EndPointX); EndPointY = ((float)Height * (float)box.EndPointY); //var gradient = new Android.Graphics.LinearGradient((float)box.StartPointX, (float)box.StartPointY, (float)width, (float)height, var gradient = new Android.Graphics.LinearGradient(StartPointX, StartPointY, EndPointX, EndPointY, box.StartColor.ToAndroid(), box.EndColor.ToAndroid(), Android.Graphics.Shader.TileMode.Clamp); var paint = new Android.Graphics.Paint() { Dither = true, }; paint.SetShader(gradient); canvas.DrawPath(path, paint); // canvas.DrawPath(); //GradientDrawable.Bounds = canvas.ClipBounds; //GradientDrawable.SetOrientation(GradientContentView.Orientation == GradientOrientation.Vertical // ? GradientDrawable.Orientation.TopBottom // : GradientDrawable.Orientation.LeftRight); //GradientDrawable.Draw(canvas); return(base.DrawChild(canvas, child, drawingTime)); }