Chinaunix首页 | 论坛 | 博客
  • 博客访问: 6644910
  • 博文数量: 915
  • 博客积分: 17977
  • 博客等级: 上将
  • 技术积分: 8846
  • 用 户 组: 普通用户
  • 注册时间: 2005-08-26 09:59
个人简介

一个好老好老的老程序员了。

文章分类

全部博文(915)

文章存档

2022年(9)

2021年(13)

2020年(10)

2019年(40)

2018年(88)

2017年(130)

2015年(5)

2014年(12)

2013年(41)

2012年(36)

2011年(272)

2010年(1)

2009年(53)

2008年(65)

2007年(47)

2006年(81)

2005年(12)

分类: Android平台

2018-02-04 19:13:01

颜色结构
在内部,Color结构以两种不同的方式存储颜色:
  •  作为类型为double的红色,绿色和蓝色(RGB)值,范围从0到1.名为R,G和B的只读属性公开这些值。
  • 作为类型为double的色调,饱和度和亮度值,其范围也是从0到1.这些值用只读属性(名为Hue,Saturation和Luminosity)进行曝光。
Color结构还支持用于指示不透明度的Alpha通道。 名为A的只读属性公开此值,其范围从透明为0到不透明为1。
所有定义颜色的属性都是只读的。 换句话说,一旦Color值被创建,它就是不可变的。
您可以通过以下几种方法之一创建一个Color值。 三个构造函数是最简单的
  • new Color(double grayShade)
  • new Color(double r, double g, double b)
  • new Color(double r, double g, double b, double a)
参数的范围可以从0到1.颜色还定义了几种静态创建方法,包括:
 Color.FromRgb(double r, double g, double b)
Color.FromRgb(int r, int g, int b)
Color.FromRgba(double r, double g, double b, double a)
Color.FromRgba(int r, int g, int b, int a)
Color.FromHsla(double h, double s, double l, double a)
具有整数参数的两个静态方法假定值的范围从0到255,这是RGB颜色的惯例表示。 在内部,构造器简单地将整数值除以255.0以转换为double。
小心! 你可能会认为你正在用这个调用创建一个红色:


点击(此处)折叠或打开

  1. Color.FromRgb(1, 0, 0)
但是,C#编译器将假定这些参数是整数。 整数FromRgb方法将被调用,第一个参数将被除以255.0,结果几乎为零。 如果要调用具有双重参数的方法,请明确指出。

点击(此处)折叠或打开

  1. Color.FromRgb(1.0, 0, 0)
Color还为字符串中的打包uint格式和十六进制格式定义了静态创建方法,但是这些方法的使用频率较低。
Color结构还定义了Color类型的17个公共静态只读字段。 在下表中,Color结构在内部用来定义这些字段的整数RGB值与相应的Hue,Saturation和Luminosity值一起显示,为了清晰起见,这些值有点圆整:

除了Pink之外,您可能会将其识别为HTML中支持的颜色名称。 第18个公共静态只读字段被命名为Transparent,其中R,G,B和A属性都设置为零。
当人们有机会交互地制定颜色时,HSL颜色模型通常比RGB更直观。 色调循环通过可见光谱(和彩虹)的颜色,以0开始,红色开始,0.33绿色,0.67开始蓝色,1开始回到红色。
“饱和度”指示颜色中色调的程度,范围从0(完全没有色调并且导致灰色阴影)到1(完全饱和)。
亮度是亮度的度量,从黑色的0到白色的1。
第15章“交互式界面”中的颜色选择程序让您更加交互地探索RGB和HSL模型。
颜色结构包括几个有趣的实例方法,允许创建新的颜色,修改现有的颜色:

  • AddLuminosity(double delta)
  • MultiplyAlpha(double alpha)
  • WithHue(double newHue)
  • WithLuminosity(double newLuminosity)
  • WithSaturation(double newSaturation)
最后,Color定义了Color类型的两个特殊的静态只读属性
  • Color.Default
  • Color.Accent
Color.Default属性在Xamarin.Forms中用于定义视图的默认颜色。 VisualElement类将其BackgroundColor属性初始化为Color.Default,Label类将其TextColor属性初始化为Color.Default。
但是,Color.Default是一个Color值,其R,G,B和A属性都设置为-1,这意味着它是一个特殊的“模拟”值,它本身没有任何意义,但表示实际值是平台特定的
对于Label和ContentPage(以及大多数派生自VisualElement的类),Color.Default的BackgroundColor设置表示透明。您在屏幕上看到的背景颜色是页面的背景颜色。页面的BackgroundColor属性默认设置为Color.Default,但是该值在不同的平台上有不同的含义.Label的TextColor属性的Color.Default的含义也取决于设备。
以下是页面的BackgroundColor和Label的TextColor隐含的默认配色方案:

在Android,Windows和Windows Phone设备上,您可以为应用程序更改此配色方案。看下一节。
您可以使用多种可能的颜色处理策略:您可以选择以非平台独立的方式进行Xamarin.Forms编程,并避免对任何手机的默认颜色方案作出任何假设。或者,您可以使用有关各种平台颜色方案的知识,并使用Device.OnPlatform指定平台特定的颜色。
但是不要试图忽略所有的平台默认值,并将你的应用程序中的所有颜色设置为你自己的颜色方案。这可能不会如你所愿,因为许多视图使用与操作系统的颜色主题相关的其他颜色,但不通过Xamarin.Forms属性公开。
一个简单的选项是使用Color.Accent属性替代文字颜色。在iPhone和Android平台上,这是一种在默认背景下可见的颜色,但不是默认的文本颜色。在Windows平台上,用户选择的颜色是颜色主题的一部分。
通过将TextColor设置为具有小于1的A属性的Color值,可以使文本变为半透明。但是,如果要使用默认文本颜色的半透明版本,请改用Label的Opacity属性。该属性由VisualElement类定义,默认值为1.对于不同的透明度,将其设置为小于1的值。

阅读(4625) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~