1

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 是一个很好的解决方案。根据@ChrisSinclair 关于使用 SolidColorBrush 画笔填充列表的评论

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"]);
4

1 回答 1

3

我只是推荐一种扩展方法来转换ColorPaint

 public static Paint AsPaint(this Color color)
 {
    Paint paint = new Paint ();
    paint.Color = color;
    return paint;          
 }

这将允许您为任何颜色编写:

canvas.DrawRect(..., Color.Red.AsPaint());

这里的一个优点是您不会隐藏Paint每次都在创建实例的事实。UsingColors.Red表明您正在创建 a Color,而不是 a Paint,并且掩码它是在每次调用时构造的。

否则,如果您希望为Colors每个属性创建一个类,您将需要一个属性Color来支持您。这可以通过编写源文件的创建脚本来完成,但是没有直接的方法来创建所有这些“颜色”而不为每种颜色编写一个属性。

于 2013-08-19T18:19:43.293 回答