Структура Color в Xamarin позволяет задавать цвета в виде значений Red-Green-Blue (RGB), Hue-Saturation-Luminosity (HSL), Hue-Saturation-Value (HSV) или в виде имени цвета. Для обозначения прозрачности также доступен альфа-канал.
Объекты цвета можно создавать с помощью конструкторов Color, которые могут использоваться для задания оттенка серого, значения RGB или значения RGB с прозрачностью. Во всех случаях аргументами являются двойные значения в диапазоне от 0 до 1.
Для создания объектов Color можно также использовать статические методы:
- Color.FromRgb для двойных значений RGB от 0 до 1.
- Color.FromRgb для целых чисел в значении RGB от 0 до 255.
- Color.FromRgba для двойных RGB-значений с прозрачностью.
- Color.FromRgba для целых чисел в значении RGB с прозрачностью.
- Color.FromHsla для двойных значений HSL с прозрачностью.
- Color.FromHsv для двойных значений HSV от 0 до 1.
- Color.FromHsv для целых чисел в значении HSV от 0 до 255.
- Color.FromHsva для двойных значений HSV с прозрачностью.
- Color.FromHsva для целых чисел в значении HSV с прозрачностью.
- Color.FromUint для uint-значения, вычисляемого как (B + 256 * (G + 256 * (R + 256 * A))).
- Color.FromHex для строкового формата шестнадцатеричных цифр в виде «#AARRGGBB» или «#RRGGBB» или «#ARGB» или «#RGB», где каждая буква соответствует шестнадцатеричной цифре для альфа-, красного, зеленого и синего каналов.
После создания объект Color является неизменяемым. Характеристики цвета можно получить из следующих свойств:
- R - красный канал цвета.
- G - зеленый канал цвета.
- B - синий канал цвета.
- A - альфа-канал цвета.
- Hue (Оттенок) – канал оттенка цвета.
- Насыщенность – канал насыщенности цвета.
- Luminosity – канал яркости цвета.
Все эти свойства являются двойными значениями в диапазоне от 0 до 1.
Именованные цвета
Структура Color также определяет 240 общедоступных статических полей, доступных только для чтения, для таких распространенных цветов, как AliceBlue.
Color.Accent
Значение Color.Accent представляет собой специфический для платформы (а иногда и для пользователя) цвет, который виден на темном или светлом фоне.
Color.Default
Значение Color.Default определяет цвет, для которого все каналы установлены в -1, и предназначено для реализации цветовой схемы платформы. Соответственно, в разных контекстах на разных платформах оно имеет разное значение. По умолчанию используются следующие цветовые схемы платформ:
- iOS: темный текст на светлом фоне.
- Android: темный текст на светлом фоне.
- Windows: темный текст на светлом фоне.
Color.Transparent
Значение Color.Transparent определяет цвет, все каналы которого установлены в ноль.
Изменение цвета
Несколько методов экземпляра позволяют модифицировать существующий цвет и создать новый:
- AddLuminosity возвращает цвет, изменяя его светимость на заданную дельту.
- MultiplyAlpha возвращает цвет, изменяя альфу, умножая ее на заданное значение альфы.
- ToHex возвращает шестнадцатеричное строковое представление цвета.
- WithHue возвращает цвет, заменяя оттенок на указанное значение.
- WithLuminosity возвращает цвет, заменяя светимость указанным значением.
- WithSaturation возвращает цвет, заменяя насыщенность указанным значением.
Неявные преобразования
Между типами Xamarin.Forms.Color и System.Drawing.Color можно выполнять неявные преобразования:
Xamarin.Forms.Color xfColor = Xamarin.Forms.Color.FromRgb(0, 72, 255); System.Drawing.Color sdColor = System.Drawing.Color.FromArgb(38, 127, 0); // Implicity convert from a Xamarin.Forms.Color to a System.Drawing.Color System.Drawing.Color sdColor2 = xfColor; // Implicitly convert from a System.Drawing.Color to a Xamarin.Forms.Color Xamarin.Forms.Color xfColor2 = sdColor;
Примеры
В XAML на цвета обычно ссылаются с помощью их именованных значений или их шестнадцатеричных представлений:
<Label Text="Sea color" TextColor="Aqua" /> <Label Text="RGB" TextColor="#00FF00" /> <Label Text="Alpha plus RGB" TextColor="#CC00FF00" /> <Label Text="Tiny RGB" TextColor="#0F0" /> <Label Text="Tiny Alpha plus RGB" TextColor="#C0F0" />
Примечание. При использовании компиляции XAML имена цветов не зависят от регистра и поэтому могут быть написаны в нижнем регистре.
В C# на цвета обычно ссылаются с помощью их именованных значений или их статических методов:
Label red = new Label { Text = «Red», TextColor = Color.Red }; Label orange = new Label { Text = «Orange», TextColor = Color.FromHex("FF6A00") }; Label yellow = new Label { Text = «Yellow», TextColor = Color.FromHsla(0.167, 1.0, 0.5, 1.0) }; Label green = new Label { Text = «Green», TextColor = Color.FromRgb (38, 127, 0) }; Label blue = new Label { Text = «Blue», TextColor = Color.FromRgba(0, 38, 255, 255) }; Label indigo = new Label { Text = «Indigo», TextColor = Color.FromRgb (0, 72, 255) }; Label violet = new Label { Text = «Violet», TextColor = Color.FromHsla(0.82, 1, 0.25, 1) };
В следующем примере расширение разметки OnPlatform используется для выборочной установки цвета индикатора ActivityIndicator:
<ActivityIndicator Color="{OnPlatform iOS=Black, Default=Default}"
IsRunning="True" />
Эквивалентный код на языке C# имеет вид:
ActivityIndicator activityIndicator = new ActivityIndicator { Color = Device.RuntimePlatform == Device.iOS ? Color.Black : Color.Default, IsRunning = true };