如何才能像下面的代码在xamarin forms中那样做相同的梯度效应?
WPF中的相同效应
<Rectangle Width="200" Height="100">
<Rectangle.Fill>
<LinearGradientBrush StartPoint="0,0" EndPoint="1,1">
<GradientStop Color="Yellow" Offset="0.0" />
<GradientStop Color="Red" Offset="0.25" />
<GradientStop Color="Blue" Offset="0.75" />
<GradientStop Color="LimeGreen" Offset="1.0" />
</LinearGradientBrush>
</Rectangle.Fill>
</Rectangle>我在xamarin forms中的Boxview
<BoxView WidthRequest="100" Grid.RowSpan="2">
</BoxView>发布于 2020-02-03 19:30:35
发布于 2020-02-04 02:01:39
如果您想使用BoxView来达到这个效果,您可以使用customRenderer。
1.在您的PCL项目中:
public class GradientColorView :BoxView
{
public Color StartColor { get; set; }
public Color MidOneColor { get; set; }
public Color MidTwoColor { get; set; }
public Color EndColor { get; set; }
}2.在Android项目中:
[assembly: ExportRenderer(typeof(GradientColorView), typeof(GradientColorViewRenderer))]
namespace App18.Droid
{
public class GradientColorViewRenderer : VisualElementRenderer<BoxView>
{
public GradientColorViewRenderer(Context context) : base(context) { }
private Color StartColor { get; set; }
public Color MidOneColor { get; set; }
public Color MidTwoColor { get; set; }
private Color EndColor { get; set; }
protected override void DispatchDraw(global::Android.Graphics.Canvas canvas)
{
#region for Vertical Gradient
//var gradient = new Android.Graphics.LinearGradient(0, 0, 0, Height,
#endregion
#region for Horizontal Gradient
var gradient = new Android.Graphics.LinearGradient(0, 0, Width, 0,new int[] {
this.StartColor.ToAndroid(),
this.MidOneColor.ToAndroid(),
this.MidTwoColor.ToAndroid(),
this.EndColor.ToAndroid()},new float[] {0.0f,0.25f,0.75f,1.0f },
#endregion
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 OnElementChanged(ElementChangedEventArgs<BoxView> e)
{
base.OnElementChanged(e);
if (e.OldElement != null || Element == null)
{
return;
}
try
{
var view = e.NewElement as GradientColorView;
this.StartColor = view.StartColor;
this.MidOneColor = view.MidOneColor;
this.MidTwoColor = view.MidTwoColor;
this.EndColor = view.EndColor;
}
catch (Exception ex)
{
}
}
}
}3.在监督办项目中:
[assembly: ExportRenderer(typeof(GradientColorView), typeof(GradientColorViewRenderer))]
namespace App18.iOS
{
public class GradientColorViewRenderer : VisualElementRenderer<BoxView>
{
public override void Draw(CGRect rect)
{
base.Draw(rect);
GradientColorView stack = (GradientColorView)this.Element;
CGColor startColor = stack.StartColor.ToCGColor();
CGColor midOneColor = stack.MidOneColor.ToCGColor();
CGColor midTwoColor = stack.MidTwoColor.ToCGColor();
CGColor endColor = stack.EndColor.ToCGColor();
#region for Vertical Gradient
var gradientLayer = new CAGradientLayer();
#endregion
#region for Horizontal Gradient
//var gradientLayer = new CAGradientLayer()
//{
// StartPoint = new CGPoint(0, 0.5),
// EndPoint = new CGPoint(1, 0.5)
//};
#endregion
gradientLayer.Frame = rect;
gradientLayer.Colors = new CGColor[] { startColor,midOneColor,midTwoColor,endColor
};
NativeView.Layer.InsertSublayer(gradientLayer, 0);
}
}
}4.在你的第xaml页:
<local:GradientColorView HeightRequest="100" HorizontalOptions="FillAndExpand" StartColor="Yellow" MidOneColor="Red" MidTwoColor="Blue" EndColor="LimeGreen"></local:GradientColorView>https://stackoverflow.com/questions/60045547
复制相似问题