xamarin.forms - 如何自定义按钮以具有渐变色背景?
问题描述
已经有一个关于如何创建具有渐变色背景的布局的解决方案,但是当我尝试实现它时,它告诉我 Android 渲染器已过时,我应该使用来自Xamarin.Forms.Platform.Android.FastRenderers
如果我将代码更改为
public class GradientStackLayout : StackLayout
{
// ...
}
代替
public class GradientStackLayout : VisualElementRenderer<StackLayout>
{
// ...
}
编译器会抱怨没有DispatchDraw
andOnElementChanged
方法。
我应该使用过时的渲染器吗?有没有实现自定义渲染器的新方法?
解决方案
GradientColorStackRenderer
您只需在 Xamarin android 的类中添加一个构造函数。
public GradientColorStackRenderer(Context context):base(context)
{
}
所以整个代码如下:
[assembly: ExportRenderer(typeof(GradientColorStack), typeof(GradientColorStackRenderer))]
namespace GradientBackgroundApp.Droid
{
public class GradientColorStackRenderer: VisualElementRenderer<StackLayout>
{
private Color StartColor { get; set; }
private Color EndColor { get; set; }
// add the construct here
public GradientColorStackRenderer(Context context):base(context)
{
}
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,
#endregion
this.StartColor.ToAndroid(),
this.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 OnElementChanged(ElementChangedEventArgs<StackLayout> e)
{
base.OnElementChanged(e);
if (e.OldElement != null || Element == null)
{
return;
}
try
{
var stack = e.NewElement as GradientColorStack;
this.StartColor = stack.StartColor;
this.EndColor = stack.EndColor;
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine(@"ERROR:", ex.Message);
}
}
}
}
推荐阅读
- php - PHP $_SESSION 变量未显示值
- angular - Angular 9将新项目添加到列表而不刷新列表
- javascript - javascript onclick() 替换图片
- sql-server - 在sql server中获取两个日期之间的工作日,小时,分钟
- reactjs - 使用 Redux 在 React 应用程序中处理套接字的最佳位置
- c++ - 使用 enable_if 和 is_default_constructible 的模板成员切换
- c++ - Wia API - 更改传输文件格式时出错
- javascript - 如何在vue中单击更改背景颜色
- javascript - 使用从错误分支服务的 git 克隆的 ionic/angular 项目
- reactjs - 当另一个div在react js中处于活动状态时如何隐藏一个div