Xamarin Forms - Gradientes e Brushes
 Neste artigo vou apresentar o novo recurso do Xamarin Forms 4.8 gradient e brushes que podem ser usados para pintar uma área.

O recurso Brushes, ou pincéis, permite “pintar” uma área de seu aplicativo com os pincéis, e para pincéis diferentes temos tipos diferentes de saída.

Os três tipos de Brushes (pincéis) são:

Lembrando que este é um recurso experimental e para ser usado teremos que adicionar o código abaixo ás classes AppDelegate no iOS, e, MainActivity no Android, antes da chamada de Forms.Init:


 global::Xamarin.Forms.Forms.SetFlags("Brush_Experimental");

Vejamos como usar este recurso na prática.

Recursos usados:

Criando o projeto Xamarin Forms

Vamos criar um novo projeto Xamarin Forms no VS 2019 Community com o nome XF_Brushes1.

Nota: Verifique se você precisa atualizar as versões do Xamarin Forms e do Xamarin.Essentials

Você pode ver como criar um projeto no Xamarin Forms neste link: Criar Projeto Xamarin Forms

Com o projeto criado precisamos incluir a flag 'Brush_Experimental' no projeto.

Podemos fazer isso no arquivo App.xaml.cs :

       public App()
        {
            Device.SetFlags(new string[] { "Brush_Experimental" });
            InitializeComponent();
            MainPage = new MainPage();
        }

Agora podemos usar o recurso em nosso projeto.

Usando Cor sólidas : SolidColorBrush

Existem três técnicas principais para criar um SolidColorBrush.

  1. Criar um SolidColorBrush a partir de uma Color;
  2. Usar um Brush (pincel) predefinido;
  3. Criar um SolidColorBrush usando a notação hexadecimal;

1 - Usando uma Color pré-definida (SolidColorBrush) :

O Xamarin Forms inclui um conversor de tipo que cria um SolidColorBrush a partir do valor de um Color.

Pintando um Frame com cor DarkGreen:

      
   <Frame Background="DarkGreen"
            BorderColor="Black"
            HasShadow="True"
            CornerRadius="12"
            HeightRequest="120"
            WidthRequest="120" />
 

 

Podemos especificar o valor da cor usando uma sintaxe com tag da propriedade:

 <Frame BorderColor="LightGray"
            HasShadow="True"
            CornerRadius="12"
            HeightRequest="120"
            WidthRequest="120">
            <Frame.Background>
                <SolidColorBrush Color="DarkBlue" />
            </Frame.Background>
        </Frame>
 

 

2 - Usando uma Brush pré-definido

A classe Brush define um conjunto de objetos SolidColorBrush.

   <Frame Background="{x:Static Brush.Aquamarine}"
           BorderColor="LightGray"
             HasShadow="True"
             CornerRadius="12"
             HeightRequest="50"
             WidthRequest="50" />
 

 

3 - Usando a notação Hexadecimal

Os objetos SolidColorBrush também podem ser criados usando notação hexadecimal.

Com essa abordagem, uma cor é especificada em termos da quantidade de vermelho, verde e azul para combinar em uma única cor. O formato principal para especificar uma cor usando notação hexadecimal é #rrggbb, onde:

Além disso, uma cor pode ser especificada como #aarrggbb onde aa especifica o valor alfa, ou transparência, da cor. Essa abordagem permite criar cores que são parcialmente transparentes.

No exemplo abaixo o Frame é pintado com uma SolidColorBrush salmon:

    <Frame Background="#FF9988"
          BorderColor="LightGray"
          HasShadow="True"
          CornerRadius="12"
          HeightRequest="50"
          WidthRequest="50" />
 

 

Usando Gradiente Linear

A classe GradientBrush deriva da classe Brush e é uma classe abstrata que descreve um gradiente, que é composto de paradas de gradiente. Um pincel gradiente pinta uma área com várias cores que se misturam ao longo de um eixo.

A classe GradientBrush define a propriedade GradientStops, do tipo GradientStopsCollection, que representa as paradas de gradiente do pincel, cada uma das quais especifica uma cor e um deslocamento ao longo do eixo do gradiente do pincel. Um GradientStopsCollection é um ObservableCollection de objetos GradientStop.

As paradas de gradiente são os blocos de construção de um pincel de gradiente e especificam as cores no gradiente e sua localização ao longo do eixo do gradiente. As paradas de gradiente são especificadas usando objetos GradientStop.

A classe GradientStop define as seguintes propriedades:

Assim, o pincel de gradiente linear permite mesclar duas (ou mais) cores em um lindo gradiente. Basta decidir onde o gradiente começa usando a propriedade StartPoint e onde termina usando a propriedade EndPoint.  

Exemplo de LinearGradientBrush com duas cores :  Yellow e Blue :

  <Frame BorderColor="LightGray"
                HasShadow="True"
                CornerRadius="12"
                HeightRequest="80"
                WidthRequest="80">
            <Frame.Background>
                <LinearGradientBrush StartPoint="0,0"
                             EndPoint="1,0">
                    <GradientStop Color="Yellow"
                          Offset="0.1"/>
                    <GradientStop Color="Blue"
                          Offset="1.0"/>
                </LinearGradientBrush>
            </Frame.Background>
        </Frame>
 

 

Outro Exemplo criando um LinearGradientBrush diagonal com 4 cores:  Yellow, Red, Blue e LimeGreen :

    <Frame BorderColor="LightGray"
                HasShadow="True"
                CornerRadius="12"
                HeightRequest="80"
                WidthRequest="80">
            <Frame.Background>
                <LinearGradientBrush StartPoint="0,0"
                     EndPoint="1,1">
                    <GradientStop Color="Yellow"
                  Offset="0.0" />
                    <GradientStop Color="Red"
                  Offset="0.25" />
                    <GradientStop Color="Blue"
                  Offset="0.75" />
                    <GradientStop Color="LimeGreen"
                  Offset="1.0" />
                </LinearGradientBrush>
            </Frame.Background>
        </Frame>
 

 

Aqui a cor de cada ponto entre as paradas de gradiente é interpolada como uma combinação da cor especificada pelas duas paradas de gradiente delimitadoras.

Usando Gradiente Radial

A classe RadialGradientBrush deriva da classe GradientBrush e pinta uma área com um gradiente radial, que combina duas ou mais cores em um círculo. Os objetos GradientStop são usados para especificar as cores no gradiente e suas posições.

A classe RadialGradientBrush define as seguintes propriedades:

As paradas de gradiente (GradientStop) de um Brush (pincel) de gradiente radial são posicionadas ao longo de um eixo de gradiente definido por um círculo. O eixo do gradiente irradia do centro do círculo até sua circunferência.

A posição e o tamanho do círculo podem ser alterados usando as propriedades Center e Radius do pincel. O círculo define o ponto final do gradiente. Portanto, uma parada de gradiente em 1.0 define a cor na circunferência do círculo. Uma parada de gradiente em 0,0 define a cor no centro do círculo.

Exemplo de uso do RadialGradientBrush definido como o background de um Frame:

      <Frame BorderColor="LightGray"
          HasShadow="True"
          CornerRadius="12"
          HeightRequest="60"
          WidthRequest="60">
            <Frame.Background>
                <RadialGradientBrush Center="0.5,0.5"
                             Radius="0.5">
                    <GradientStop Color="Red"
                          Offset="0.1"/>
                    <GradientStop Color="DarkBlue"
                          Offset="1.0"/>
                </RadialGradientBrush>
            </Frame.Background>
        </Frame>
 

 

Neste exemplo o gradiente radial pinta a área designada com um gradiente radial. O que permite a combinação de duas ou mais cores em um círculo. Você também pode decidir o centro do gradiente usando a propriedade Center. Bem como o raio do gradiente usando a propriedade Radius.

O código abaixo move o centro do gradiente radial para o canto superior esquerdo do Frame:


<RadialGradientBrush Center="0.0,0.0">
    <GradientStop Color="Red"  Offset="0.1" />
    <GradientStop Color="DarkBlue"  Offset="1.0" />
</RadialGradientBrush>

 

Assim, usando Brush e Gradients você pode liberar aquele artista que esta dentro de você...

"Fui buscado dos que não perguntavam por mim, fui achado daqueles que não me buscavam; a uma nação que não se chamava do meu nome eu disse: Eis-me aqui. Eis-me aqui."
Isaías 65:1

Referências:


José Carlos Macoratti