【问题标题】:Gradient Layer form as the form of a button in Xamarin.Forms Android渐变层形式作为 Xamarin.Forms Android 中的按钮形式
【发布时间】:2015-09-09 01:27:44
【问题描述】:

我需要按钮上的渐变背景。我使用Custome Renderer 来做到这一点。这是我的代码:

[assembly: ExportRenderer (typeof (Xamarin.Forms.Button), typeof (EvoMotorOilApp.Droid.MyButtonRender))]

...

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, 255).ToAndroid(), 
            Color.FromRgba(70, 70, 70, 50).ToAndroid(),
            Android.Graphics.Shader.TileMode.Repeat);

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

        canvas.DrawPaint(paint);


    }

但是结果渐变层超出了按钮并且他有锐角。如何做到这一点会形成渐变就像按钮形式一样? 有截图:https://drive.google.com/file/d/0B8C-lgUpGFGDVzhVUzJrMm01cFU/view?usp=sharing

【问题讨论】:

    标签: android xamarin xamarin.forms


    【解决方案1】:

    只需将控件背景颜色设置为GradientDrawable:

    public class GradientButtonRenderer : ButtonRenderer
    {
        protected override void OnElementChanged(ElementChangedEventArgs<Button> e)
        {
            base.OnElementChanged(e);
    
            if (Control != null)
            {
                var gradient = new GradientDrawable(GradientDrawable.Orientation.TopBottom, new[] {
                    Color.FromRgba(255, 255, 255, 255).ToAndroid().ToArgb(), 
                    Color.FromRgba(70, 70, 70, 50).ToAndroid().ToArgb()
                });
    
                Control.SetBackgroundDrawable(gradient);
            }
        }
    }
    

    您还可以使用StateListDrawable 为正常/按下/禁用按钮状态设置不同的颜色。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-29
      • 2016-01-30
      • 2011-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-04
      • 1970-01-01
      相关资源
      最近更新 更多