Android API中的许多Canvas方法都需要定义Paint对象才能定义颜色。这样做的方法是,
Paint myPaintObject = new Paint();
myPaintObject.Color = Color.Red;
canvas.DrawRect(..., myPaintObject);
如果看起来像这样会更好,
canvas.DrawRect(..., Colors.Red);
解决方案类可能看起来像这样......
public static class Colors
{
public static Paint Red { get { return GetColors(Color.Red); } }
public static Paint Black { get { return GetColors(Color.Black); } }
private static Paint GetColors(Color color)
{
Paint paint = new Paint ();
paint.Color = color;
return paint;
}
}
但是必须为每种可用的颜色创建吸气剂。任何使这更容易的想法?
编辑:LINQ是一个非常好的解决方案。 Per @ ChrisSinclair关于populate List with SolidColorBrush brushes
的评论this.Colors = typeof(Color)
.GetProperties(System.Reflection.BindingFlags.Static |
System.Reflection.BindingFlags.Public)
.ToDictionary(p => p.Name,
p => new Paint()
{ Color = ((Color)p.GetValue(null, null)) });
调用时,看起来像,
canvas.DrawRect(..., Colors["Red"]);
答案 0 :(得分:3)
我建议使用扩展方法将Color
转换为Paint
:
public static Paint AsPaint(this Color color)
{
Paint paint = new Paint ();
paint.Color = color;
return paint;
}
这将允许你写任何颜色:
canvas.DrawRect(..., Color.Red.AsPaint());
这里的一个优点是,您并没有隐藏每次创建Paint
实例的事实。使用Colors.Red
表示您正在创建Color
,而不是Paint
,并屏蔽每次调用时正在构建的内容。
否则,如果您希望为每个属性制作一个Colors
课程,则每个Color
您需要一个属性来支持。这可以通过编写源文件的创建来完成,但没有直接的方法来创建所有这些“颜色”,而无需为每种颜色编写属性。