在 Xamarin.Forms Android 中添加渐变层

Adding a Gradient Layer in Xamarin.Forms Android

我需要在背景图片上添加渐变。我已经将我的图像设置为页面的背景,但我不知道如何最好地在 Android 中添加渐变。我用 iOS 完成了以下操作:

public class GradientContentPageRenderer : PageRenderer
{

    protected override void OnElementChanged(VisualElementChangedEventArgs e)
    {
        base.OnElementChanged(e);

        if (e.OldElement == null) // perform initial setup
        {
            var page = e.NewElement as GradientContentPage;
            var gradientLayer = new CAGradientLayer();
            gradientLayer.Frame = View.Bounds;
            gradientLayer.Locations = new NSNumber[] { 0.2,0.8} ;
            gradientLayer.Colors = new CGColor[] { page.StartColor.ToCGColor(), page.EndColor.ToCGColor() };
            View.Layer.InsertSublayer(gradientLayer, 0);

        }
    }
}  

我知道如何使用带有 Android 的 Drawable 创建渐变,但我不知道如何将其添加为图层。如果可能的话,我想在渲染期间使用自定义渲染器注入一个新的相对布局,但我不知道该怎么做。请记住,我需要保留现有的背景图像,我只想在顶部放置一个渐变。

有没有办法动态插入额外的布局和渲染时间?或者我应该采取不同的方法吗?

protected override void DispatchDraw(global::Android.Graphics.Canvas canvas)
{
    base.DispatchDraw(canvas);

    var gradient = new Android.Graphics.LinearGradient(0, 0, 0, Height, 
        Color.FromRgba(255, 255, 255, 100).ToAndroid(), 
        Color.FromRgba(0, 0, 0, 100).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 DispatchDraw(global::Android.Graphics.Canvas canvas)
{
    var gradient = new Android.Graphics.LinearGradient(0, 0, 0, Height, 
        Color.FromRgba(255, 255, 255, 100).ToAndroid(), 
        Color.FromRgba(0, 0, 0, 100).ToAndroid(), 
        Android.Graphics.Shader.TileMode.Mirror);

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

    canvas.DrawPaint(paint);

    base.DispatchDraw(canvas);
}