Resumo do Capítulo 21. Transformações

Baixar exemplo Baixar o exemplo

Observação

Este livro foi publicado na primavera de 2016, e não foi atualizado desde então. Há muito no livro que permanece valioso, mas parte do material está desatualizado, e alguns tópicos não estão mais totalmente corretos ou concluídos.

Uma Xamarin.Forms exibição aparece na tela em um local e tamanho determinados por seu pai, que geralmente é um Layout derivado ou Layout<View> . A transformação é um Xamarin.Forms recurso que pode modificar esse local, tamanho ou até mesmo orientação.

Xamarin.Forms dá suporte a três tipos básicos de transformações:

  • Tradução – deslocar um elemento horizontal ou verticalmente
  • Escala – alterar o tamanho de um elemento
  • Rotação – girar um elemento em torno de um ponto ou eixo

No Xamarin.Forms, o dimensionamento é isotrópico; afeta a largura e a altura uniformemente. Há suporte para rotação na superfície bidimensional da tela e no espaço 3D. Não há transformação de distorção (ou pura) e nenhuma transformação de matriz generalizada.

Há suporte para transformações com oito propriedades do tipo double definidas pela VisualElement classe :

Todas essas propriedades são apoiadas por propriedades associáveis. Eles podem ser alvos de associação de dados e estilizados. Capítulo 22. A animação demonstra como essas propriedades podem ser animadas, mas alguns exemplos neste capítulo mostram como você pode animá-las usando o Xamarin.Formstemporizador.

As propriedades de transformação afetam apenas como o elemento é renderizado e não afetam como o elemento é percebido no layout.

A transformação de tradução

Valores diferentes de zero das TranslationX propriedades e TranslationY deslocam um elemento horizontal ou verticalmente.

O programa TranslationDemo permite que você experimente essas propriedades com dois Slider elementos que controlam as TranslationX propriedades e TranslationY de um Frame. A transformação também afeta todos os filhos desse Frame.

Efeitos de texto

Um uso comum das propriedades de tradução é compensar ligeiramente a renderização do texto. Isso é demonstrado no exemplo TextOffsets :

Captura de tela tripla de Deslocamentos de Texto Deslocamentos

Outro efeito é renderizar várias cópias de um Label para se assemelhar a um bloco 3D, como demonstrado no exemplo BlockText .

Saltos e animações

O exemplo ButtonJump usa a tradução para mover um Button sempre que ele é tocado, mas a intenção principal é demonstrar que o recebe a entrada do Button usuário no local em que o botão é renderizado.

O exemplo ButtonGlide é semelhante, mas usa um temporizador para animar o Button de um ponto para outro.

A transformação de escala

A Scale transformação pode aumentar ou diminuir o tamanho renderizado do elemento. O valor padrão é 1. Um valor 0 faz com que o elemento seja invisível. Valores negativos fazem com que o elemento pareça ser girado 180 graus. A Scale propriedade não afeta as Width propriedades ou Height do elemento . Esses valores permanecem os mesmos.

Você pode experimentar a Scale propriedade usando o exemplo SimpleScaleDemo .

O exemplo ButtonScaler demonstra a diferença entre animar a Scale propriedade de um Button e animar a FontSize propriedade. A FontSize propriedade afeta como o Button é percebido no layout; a Scale propriedade não.

O exemplo ScaleToSize calcula uma Scale propriedade que é aplicada a um Label elemento para torná-la o maior possível enquanto ainda se ajusta dentro da página.

Ancorando a escala

Os elementos dimensionados nos três exemplos anteriores aumentaram ou diminuíram de tamanho em relação ao centro do elemento. Em outras palavras, o elemento aumenta ou diminui de tamanho o mesmo em todas as direções. Somente o ponto no centro do elemento permanece no mesmo local durante o dimensionamento.

Você pode alterar o centro do dimensionamento definindo as AnchorX propriedades e AnchorY . Essas propriedades são relativas ao próprio elemento. Para AnchorX, um valor de 0 refere-se ao lado esquerdo do elemento e 1 refere-se ao lado direito. Da mesma forma para AnchorY, 0 é a parte superior e 1 é a parte inferior. Ambas as propriedades têm valores padrão de 0,5, que é o centro.

O exemplo AnchoredScaleDemo permite que você experimente as AnchorX propriedades e, AnchorY bem como a Scale propriedade .

No iOS, o uso de valores não padrão de e AnchorY propriedades AnchorX geralmente é incompatível com as alterações de orientação do telefone.

A transformação de rotação

A Rotation propriedade é especificada em graus e indica rotação no sentido horário em torno de um ponto do elemento definido por AnchorX e AnchorY. O PlaneRotationDemo permite que você experimente essas três propriedades.

Efeitos de texto girados

A amostra BoxViewCircle demonstra a matemática necessária para desenhar um círculo usando 64 pequenos elementos girados BoxView .

O exemplo RotatedText exibe vários Label elementos com a mesma cadeia de caracteres de texto girada para aparecer como spokes.

O exemplo CircularText exibe uma cadeia de caracteres de texto que parece encapsular em um círculo.

Um relógio analógico

A Xamarin.Formsbiblioteca Book.Toolkit contém uma AnalogClockViewModel classe que calcula ângulos para as mãos de um relógio. Para evitar dependências de plataforma no ViewModel, a classe usa Task.Delay em vez de um temporizador para localizar um novo DateTime valor.

Também incluída no Xamarin.FormsBook.Toolkit é uma SecondTickConverter classe que implementa IValueConverter e serve para arredondar um segundo ângulo para o segundo mais próximo.

O MinimalBoxViewClock usa três elementos rotativos BoxView para desenhar um relógio analógico.

O BoxViewClock usa para elementos gráficos BoxView mais extensos, incluindo marcas de tique ao redor da face do relógio e mãos que giram um pouco de distância de suas extremidades:

de tela tripla do relógio analógico da face do relógio BoxView

Além disso, uma SecondBackEaseConverter classe no Book.Toolkit faz com que a segunda mão pareça recuar um pouco antes de saltar para frente e, em Xamarin.Forms seguida, voltar para sua posição correta.

Controles deslizantes verticais?

O exemplo VerticalSliders demonstra que Slider os elementos podem ser girados 90 graus e ainda funcionar. No entanto, é difícil posicionar esses elementos girados Slider porque, no layout, eles ainda parecem ser horizontais.

Rotações 3D-ish

A RotationX propriedade parece girar um elemento em torno de um eixo X 3D para que a parte superior e inferior do elemento pareçam se mover para ou para longe do visualizador. Da mesma forma, o RotationY parece girar um elemento ao redor do eixo Y para fazer com que os lados esquerdo e direito do elemento pareçam se mover para ou para longe do visualizador.

A AnchorX propriedade afeta RotationY , mas não RotationX. A AnchorY propriedade afeta RotationX , mas não RotationY. Você pode experimentar o exemplo ThreeDeeRotationDemo para explorar as interações dessas propriedades.

O sistema de coordenadas 3D implícito por Xamarin.Forms é canhoto. Se você apontar o indicador da mão esquerda na direção de aumentar as coordenadas X (para a direita) e o dedo médio na direção de aumentar as coordenadas Y (para baixo), o polegar apontará na direção do aumento das coordenadas Z (fora da tela).

Além disso, para qualquer um dos três eixos, se você apontar o polegar esquerdo na direção de valores crescentes, a curva dos dedos indicará a direção da rotação para ângulos de rotação positivos.