Compartilhar via


Resumo do Capítulo 21. Transformações

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 completos.

Uma Xamarin.Forms exibição aparece na tela em um local e tamanho determinados por seu pai, que geralmente é um Layout ou Layout<View> derivado. 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:

  • Translação — deslocar um elemento horizontal ou verticalmente
  • Escala — altera o tamanho de um elemento
  • Rotação — gire um elemento em torno de um ponto ou eixo

Em Xamarin.Forms, a escala é isotrópica; afeta a largura e a altura uniformemente. A rotação é suportada tanto na superfície bidimensional da tela quanto no espaço 3D. Não há transformação distorcida (ou pura) e nenhuma transformação de matriz generalizada.

As transformações são suportadas com oito propriedades do tipo double definido pela VisualElement classe:

Todas essas propriedades são apoiadas por propriedades associáveis. Eles podem ser alvos de vinculação de dados e estilizados. Capitulo 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 disso Frame.

Efeitos de texto

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

Captura de tela tripla de deslocamentos de texto

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 Button recebe a entrada do usuário no local em que o botão é renderizado.

O exemplo ButtonGlide é semelhante, mas usa um temporizador para animar de Button um ponto a 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 de 0 faz com que o elemento fique invisível. Valores negativos fazem com que o elemento pareça estar 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 a Button e animar a FontSize propriedade. A FontSize propriedade afeta como o é percebido Button no layout; a Scale propriedade não.

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

Ancorando a balança

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

Você pode alterar o centro da escala 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 é o topo e 1 é o fundo. Ambas as propriedades têm valores padrão de 0,5, que é o centro.

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

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

A transformação de rotação

A Rotation propriedade é especificada em graus e indica a 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

O exemplo 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 raios.

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

Um relógio analógico

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

Também está 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 BoxView gráficos mais extensos, incluindo marcas de seleção ao redor do mostrador do relógio e ponteiros que giram um pouco longe de suas extremidades:

Captura de tela tripla do BoxView Clock

Além disso, uma SecondBackEaseConverter classe em Xamarin.FormsBook.Toolkit faz com que o ponteiro dos segundos pareça recuar um pouco antes de pular para frente e, em 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

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 em direção ou para longe do visualizador. Da mesma forma, o RotationY parece girar um elemento em torno do eixo Y para fazer com que os lados esquerdo e direito do elemento pareçam se mover em direção 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 de aumentar as coordenadas Z (para 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 de seus dedos indicará a direção de rotação para ângulos de rotação positivos.