Note
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier les répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de changer de répertoire.
A Transform définit comment transformer un objet d’un Path espace de coordonnées en un autre espace de coordonnées. Lorsqu’une transformation est appliquée à un Path objet, elle modifie le rendu de l’objet dans l’interface utilisateur.
Les transformations peuvent être classées en quatre classifications générales : rotation, mise à l’échelle, asymétrie et traduction. Xamarin.Forms définit une classe pour chacune de ces classifications de transformation :
RotateTransform, qui fait pivoter unPathpar un spécifiéAngle.ScaleTransform, qui met à l’échelle unPathobjet selon les quantités etScaleYles quantités spécifiéesScaleX.SkewTransform, qui asymétrie unPathobjet par des quantités etAngleYdes quantités spécifiéesAngleX.TranslateTransform, qui déplace unPathobjet par des quantités etYdes quantités spécifiéesX.
Xamarin.Forms fournit également les classes suivantes pour créer des transformations plus complexes :
TransformGroup, qui représente une transformation composite composée de plusieurs objets de transformation.CompositeTransform, qui applique plusieurs opérations de transformation à unPathobjet.MatrixTransform, qui crée des transformations personnalisées qui ne sont pas fournies par les autres classes de transformation.
Toutes ces classes dérivent de la Transform classe, qui définit une Value propriété de type Matrix, qui représente la transformation actuelle en tant qu’objet Matrix . Cette propriété est sauvegardée par un BindableProperty objet, ce qui signifie qu’elle peut être la cible de liaisons de données et de style. Pour plus d’informations sur le Matrix struct, consultez Transform matrix.
Pour appliquer une transformation à un Path, vous créez une classe de transformation et définissez-la comme valeur de la Path.RenderTransform propriété.
Transformation de rotation
Une transformation de rotation fait pivoter un Path objet dans le sens des aiguilles d’une montre sur un point spécifié dans un système de coordonnées 2D x-y.
La RotateTransform classe, qui dérive de la Transform classe, définit les propriétés suivantes :
Angle, de typedouble, représente l’angle, en degrés, de rotation au niveau des aiguilles d’une montre. La valeur par défaut de cette propriété est 0.0.CenterX, de typedouble, représente la coordonnée x du point central de rotation. La valeur par défaut de cette propriété est 0.0.CenterY, de typedouble, représente la coordonnée y du point central de rotation. La valeur par défaut de cette propriété est 0.0.
Les propriétés s’appuient sur des objets BindableProperty, ce qui signifie qu’elles peuvent être les cibles de liaisons de données et mises en forme avec un style.
Les CenterX propriétés et CenterY spécifient le point sur lequel l’objet Path est pivoté. Ce point central est exprimé dans l’espace de coordonnées de l’objet transformé. Par défaut, la rotation est appliquée à (0,0), qui est l’angle supérieur gauche de l’objet Path .
L’exemple suivant montre comment faire pivoter un Path objet :
<Path Stroke="Black"
Aspect="Uniform"
HorizontalOptions="Center"
HeightRequest="100"
WidthRequest="100"
Data="M13.908992,16.207977L32.000049,16.207977 32.000049,31.999985 13.908992,30.109983z">
<Path.RenderTransform>
<RotateTransform CenterX="0"
CenterY="0"
Angle="45" />
</Path.RenderTransform>
</Path>
Dans cet exemple, l’objet Path est pivoté de 45 degrés sur son angle supérieur gauche.
Transformation de mise à l’échelle
Une transformation d’échelle met à l’échelle un Path objet dans le système de coordonnées 2D x-y.
La ScaleTransform classe, qui dérive de la Transform classe, définit les propriétés suivantes :
ScaleX, de typedouble, qui représente le facteur d’échelle de l’axe x. La valeur par défaut de cette propriété est 1.0.ScaleY, de typedouble, qui représente le facteur d’échelle de l’axe y. La valeur par défaut de cette propriété est 1.0.CenterX, de typedouble, qui représente la coordonnée x du point central de cette transformation. La valeur par défaut de cette propriété est 0.0.CenterY, de typedouble, qui représente la coordonnée y du point central de cette transformation. La valeur par défaut de cette propriété est 0.0.
Les propriétés s’appuient sur des objets BindableProperty, ce qui signifie qu’elles peuvent être les cibles de liaisons de données et mises en forme avec un style.
La valeur et ScaleX ScaleY l’impact énorme sur la mise à l’échelle résultante :
- Les valeurs comprises entre 0 et 1 diminuent la largeur et la hauteur de l’objet mis à l’échelle.
- Les valeurs supérieures à 1 augmentent la largeur et la hauteur de l’objet mis à l’échelle.
- Les valeurs 1 indiquent que l’objet n’est pas mis à l’échelle.
- Les valeurs négatives retournent l’objet d’échelle horizontalement et verticalement.
- Les valeurs comprises entre 0 et -1 retournent l’objet d’échelle et diminuent sa largeur et sa hauteur.
- Les valeurs inférieures à -1 retournent l’objet et augmentent sa largeur et sa hauteur.
- Les valeurs de -1 retournent l’objet mis à l’échelle, mais ne changent pas sa taille horizontale ou verticale.
Les CenterX propriétés et CenterY spécifient le point sur lequel l’objet est mis à l’échelle Path . Ce point central est exprimé dans l’espace de coordonnées de l’objet transformé. Par défaut, la mise à l’échelle est appliquée à (0,0), qui est l’angle supérieur gauche de l’objet Path . Cela a pour effet de déplacer l’objet Path et de le rendre plus grand, car lorsque vous appliquez une transformation, vous modifiez l’espace de coordonnées dans lequel réside l’objet Path .
L’exemple suivant montre comment mettre à l’échelle un Path objet :
<Path Stroke="Black"
Aspect="Uniform"
HorizontalOptions="Center"
HeightRequest="100"
WidthRequest="100"
Data="M13.908992,16.207977L32.000049,16.207977 32.000049,31.999985 13.908992,30.109983z">
<Path.RenderTransform>
<ScaleTransform CenterX="0"
CenterY="0"
ScaleX="1.5"
ScaleY="1.5" />
</Path.RenderTransform>
</Path>
Dans cet exemple, l’objet Path est mis à l’échelle à 1,5 fois la taille.
Transformation d’asymétrie
Une transformation d’asymétrie asymétrie un Path objet dans le système de coordonnées x-y 2D et est utile pour créer l’illusion de profondeur 3D dans un objet 2D.
La SkewTransform classe, qui dérive de la Transform classe, définit les propriétés suivantes :
AngleX, de typedouble, qui représente l’angle d’asymétrie de l’axe x, qui est mesuré en degrés dans le sens inverse à partir de l’axe y. La valeur par défaut de cette propriété est 0.0.AngleY, de typedouble, qui représente l’angle d’asymétrie de l’axe y, qui est mesuré en degrés dans le sens inverse à partir de l’axe x. La valeur par défaut de cette propriété est 0.0.CenterX, de typedouble, qui représente la coordonnée x du centre de transformation. La valeur par défaut de cette propriété est 0.0.CenterY, de typedouble, qui représente la coordonnée y du centre de transformation. La valeur par défaut de cette propriété est 0.0.
Les propriétés s’appuient sur des objets BindableProperty, ce qui signifie qu’elles peuvent être les cibles de liaisons de données et mises en forme avec un style.
Pour prédire l’effet d’une transformation d’asymétrie, pensez à ce que AngleX les valeurs de l’axe x par rapport au système de coordonnées d’origine. Par conséquent, pour une AngleX valeur de 30, l’axe y pivote de 30 degrés à travers l’origine et fait pivoter les valeurs en x de 30 degrés de cette origine. De même, une AngleY valeur de 30 écarte les valeurs y de l’objet Path de 30 degrés à partir de l’origine.
Remarque
Pour faire pivoter un Path objet en place, définissez les CenterX propriétés sur CenterY le point central de l’objet.
L’exemple suivant montre comment asymétrie d’un Path objet :
<Path Stroke="Black"
Aspect="Uniform"
HorizontalOptions="Center"
HeightRequest="100"
WidthRequest="100"
Data="M13.908992,16.207977L32.000049,16.207977 32.000049,31.999985 13.908992,30.109983z">
<Path.RenderTransform>
<SkewTransform CenterX="0"
CenterY="0"
AngleX="45"
AngleY="0" />
</Path.RenderTransform>
</Path>
Dans cet exemple, une asymétrie horizontale de 45 degrés est appliquée à l’objet Path , à partir d’un point central de (0,0).
Traduire la transformation
Une transformation de traduction déplace un objet dans le système de coordonnées x-y 2D.
La TranslateTransform classe, qui dérive de la Transform classe, définit les propriétés suivantes :
X, de typedouble, qui représente la distance à parcourir le long de l’axe x. La valeur par défaut de cette propriété est 0.0.Y, de typedouble, qui représente la distance à déplacer le long de l’axe y. La valeur par défaut de cette propriété est 0.0.
Les propriétés s’appuient sur des objets BindableProperty, ce qui signifie qu’elles peuvent être les cibles de liaisons de données et mises en forme avec un style.
Les valeurs négatives X déplacent un objet vers la gauche, tandis que les valeurs positives déplacent un objet vers la droite. Les valeurs négatives Y déplacent un objet vers le haut, tandis que les valeurs positives déplacent un objet vers le bas.
L’exemple suivant montre comment traduire un Path objet :
<Path Stroke="Black"
Aspect="Uniform"
HorizontalOptions="Center"
HeightRequest="100"
WidthRequest="100"
Data="M13.908992,16.207977L32.000049,16.207977 32.000049,31.999985 13.908992,30.109983z">
<Path.RenderTransform>
<TranslateTransform X="50"
Y="50" />
</Path.RenderTransform>
</Path>
Dans cet exemple, l’objet Path est déplacé 50 unités indépendantes de l’appareil à droite et 50 unités indépendantes de l’appareil vers le bas.
Transformations multiples
Xamarin.Forms a deux classes qui prennent en charge l’application de plusieurs transformations à un Path objet. Il s’agit TransformGroup, et CompositeTransform. Un TransformGroup effectue des transformations dans n’importe quel ordre souhaité, tandis qu’une CompositeTransform transformation effectue dans un ordre spécifique.
Groupes de transformation
Les groupes de transformations représentent des transformations composites composées de plusieurs Transform objets.
La TransformGroup classe, qui dérive de la Transform classe, définit une Children propriété, de type TransformCollection, qui représente une collection d’objets Transform . Cette propriété est sauvegardée par un BindableProperty objet, ce qui signifie qu’elle peut être la cible de liaisons de données et de style.
L’ordre des transformations est important dans une transformation composite qui utilise la TransformGroup classe. Par exemple, si vous faites d’abord pivoter, puis effectuez une mise à l’échelle, vous obtenez un résultat différent de celui que si vous traduisez d’abord, puis faites pivoter, puis mettez à l’échelle. Un ordre de raison est important : les transformations telles que la rotation et la mise à l’échelle sont effectuées en fonction de l’origine du système de coordonnées. La mise à l’échelle d’un objet centré à l’origine produit un résultat différent pour mettre à l’échelle un objet qui a été déplacé loin de l’origine. De même, la rotation d’un objet centré à l’origine produit un résultat différent de celui d’un objet qui a été déplacé loin de l’origine.
L’exemple suivant montre comment effectuer une transformation composite à l’aide de la TransformGroup classe :
<Path Stroke="Black"
Aspect="Uniform"
HorizontalOptions="Center"
HeightRequest="100"
WidthRequest="100"
Data="M13.908992,16.207977L32.000049,16.207977 32.000049,31.999985 13.908992,30.109983z">
<Path.RenderTransform>
<TransformGroup>
<ScaleTransform ScaleX="1.5"
ScaleY="1.5" />
<RotateTransform Angle="45" />
</TransformGroup>
</Path.RenderTransform>
</Path>
Dans cet exemple, l’objet Path est mis à l’échelle à 1,5 fois sa taille, puis pivoté de 45 degrés.
Transformations composites
Une transformation composite applique plusieurs transformations à un objet.
La CompositeTransform classe, qui dérive de la Transform classe, définit les propriétés suivantes :
CenterX, de typedouble, qui représente la coordonnée x du point central de cette transformation. La valeur par défaut de cette propriété est 0.0.CenterY, de typedouble, qui représente la coordonnée y du point central de cette transformation. La valeur par défaut de cette propriété est 0.0.ScaleX, de typedouble, qui représente le facteur d’échelle de l’axe x. La valeur par défaut de cette propriété est 1.0.ScaleY, de typedouble, qui représente le facteur d’échelle de l’axe y. La valeur par défaut de cette propriété est 1.0.SkewX, de typedouble, qui représente l’angle d’asymétrie de l’axe x, qui est mesuré en degrés dans le sens inverse à partir de l’axe y. La valeur par défaut de cette propriété est 0.0.SkewY, de typedouble, qui représente l’angle d’asymétrie de l’axe y, qui est mesuré en degrés dans le sens inverse à partir de l’axe x. La valeur par défaut de cette propriété est 0.0.Rotation, de typedouble, représente l’angle, en degrés, de rotation au niveau des aiguilles d’une montre. La valeur par défaut de cette propriété est 0.0.TranslateX, de typedouble, qui représente la distance à parcourir le long de l’axe x. La valeur par défaut de cette propriété est 0.0.TranslateY, de typedouble, qui représente la distance à déplacer le long de l’axe y. La valeur par défaut de cette propriété est 0.0.
Les propriétés s’appuient sur des objets BindableProperty, ce qui signifie qu’elles peuvent être les cibles de liaisons de données et mises en forme avec un style.
Une CompositeTransform transformation s’applique dans cet ordre :
- Mettre à l’échelle (
ScaleXetScaleY). - Asymétrie (
SkewXetSkewY). - Faire pivoter (
Rotation). - Traduire (
TranslateX,TranslateY).
Si vous souhaitez appliquer plusieurs transformations à un objet dans un ordre différent, vous devez créer et TransformGroup insérer les transformations dans votre ordre prévu.
Important
A CompositeTransform utilise les mêmes points centraux et CenterX CenterY, pour toutes les transformations. Si vous souhaitez spécifier différents points centraux par transformation, utilisez un TransformGroup,
L’exemple suivant montre comment effectuer une transformation composite à l’aide de la CompositeTransform classe :
<Path Stroke="Black"
Aspect="Uniform"
HorizontalOptions="Center"
HeightRequest="100"
WidthRequest="100"
Data="M13.908992,16.207977L32.000049,16.207977 32.000049,31.999985 13.908992,30.109983z">
<Path.RenderTransform>
<CompositeTransform ScaleX="1.5"
ScaleY="1.5"
Rotation="45"
TranslateX="50"
TranslateY="50" />
</Path.RenderTransform>
</Path>
Dans cet exemple, l’objet Path est mis à l’échelle à 1,5 fois sa taille, puis pivoté de 45 degrés, puis traduit par 50 unités indépendantes de l’appareil.
Matrice de transformation
Une transformation peut être décrite en termes de matrice de transformation affine 3x3, qui effectue des transformations dans l’espace 2D. Cette matrice 3x3 est représentée par le Matrix struct, qui est une collection de trois lignes et trois colonnes de double valeurs.
Le Matrix struct définit les propriétés suivantes :
Determinant, de typedouble, qui obtient le déterminant de la matrice.HasInverse, de typebool, qui indique si la matrice est inversée.Identity, de typeMatrix, qui obtient une matrice d’identité.HasIdentity, de typebool, qui indique si la matrice est une matrice d’identité.M11, de typedouble, qui représente la valeur de la première ligne et de la première colonne de la matrice.M12, de typedouble, qui représente la valeur de la première ligne et de la deuxième colonne de la matrice.M21, de typedouble, qui représente la valeur de la deuxième ligne et de la première colonne de la matrice.M22, de typedouble, qui représente la valeur de la deuxième ligne et de la deuxième colonne de la matrice.OffsetX, de typedouble, qui représente la valeur de la troisième ligne et de la première colonne de la matrice.OffsetY, de typedouble, qui représente la valeur de la troisième ligne et de la deuxième colonne de la matrice.
Les OffsetX propriétés et OffsetY les propriétés sont ainsi nommées, car elles spécifient la quantité pour traduire l’espace de coordonnées le long de l’axe x et de l’axe y, respectivement.
En outre, le Matrix struct expose une série de méthodes qui peuvent être utilisées pour manipuler les valeurs de matrice, notamment Append, , InvertMultiply, et Prepend bien plus encore.
Le tableau suivant montre la structure d’une Xamarin.Forms matrice :
M11
M12
0.0
M21
M22
0.0
OffsetX
OffsetY
1.0
Remarque
Une matrice de transformation affine a sa colonne finale égale à (0,0,1), donc seuls les membres des deux premières colonnes doivent être spécifiés.
En manipulant des valeurs de matrice, vous pouvez faire pivoter, mettre à l’échelle, asymétrie et traduire des Path objets. Par exemple, si vous remplacez la OffsetX valeur par 100, vous pouvez l’utiliser pour déplacer un Path objet 100 unités indépendantes de l’appareil le long de l’axe x. Si vous remplacez la M22 valeur par 3, vous pouvez l’utiliser pour étirer un Path objet à trois fois sa hauteur actuelle. Si vous modifiez les deux valeurs, vous déplacez l’objet Path 100 unités indépendantes de l’appareil le long de l’axe x et étirez sa hauteur d’un facteur de 3. En outre, les matrices de transformation affine peuvent être multipliées pour former n’importe quel nombre de transformations linéaires, telles que la rotation et l’asymétrie, suivies de la traduction.
Transformations personnalisées
La MatrixTransform classe, qui dérive de la Transform classe, définit une Matrix propriété, de type Matrix, qui représente la matrice qui définit la transformation. Cette propriété est sauvegardée par un BindableProperty objet, ce qui signifie qu’elle peut être la cible de liaisons de données et de style.
Toute transformation que vous pouvez décrire avec un objet ou RotateTransformSkewTransform un TranslateTransformobjet ScaleTransformpeut également être décrite par un MatrixTransform. Toutefois, les classes , ScaleTransformet RotateTransformSkewTransform les TranslateTransformclasses sont plus faciles à conceptualiser que de définir les composants vectoriels dans un Matrix. Par conséquent, la MatrixTransform classe est généralement utilisée pour créer des transformations personnalisées qui ne sont pas fournies par les classes, ScaleTransformSkewTransformou TranslateTransform les RotateTransformclasses.
L’exemple suivant montre comment transformer un Path objet à l’aide d’un MatrixTransform:
<Path Stroke="Black"
Aspect="Uniform"
HorizontalOptions="Center"
Data="M13.908992,16.207977L32.000049,16.207977 32.000049,31.999985 13.908992,30.109983z">
<Path.RenderTransform>
<MatrixTransform>
<MatrixTransform.Matrix>
<!-- M11 stretches, M12 skews -->
<Matrix OffsetX="10"
OffsetY="100"
M11="1.5"
M12="1" />
</MatrixTransform.Matrix>
</MatrixTransform>
</Path.RenderTransform>
</Path>
Dans cet exemple, l’objet Path est étiré, asymétrique et décalé dans les dimensions X et Y.
Vous pouvez également écrire ceci dans un formulaire simplifié qui utilise un convertisseur de type intégré à Xamarin.Forms:
<Path Stroke="Black"
Aspect="Uniform"
HorizontalOptions="Center"
Data="M13.908992,16.207977L32.000049,16.207977 32.000049,31.999985 13.908992,30.109983z">
<Path.RenderTransform>
<MatrixTransform Matrix="1.5,1,0,1,10,100" />
</Path.RenderTransform>
</Path>
Dans cet exemple, la Matrix propriété est spécifiée sous la forme d’une chaîne délimitée par des virgules composée de six membres : M11, M12, , M21, M22, OffsetX, OffsetY. Bien que les membres soient délimités par des virgules dans cet exemple, ils peuvent également être délimités par un ou plusieurs espaces.
En outre, l’exemple précédent peut être simplifié encore plus en spécifiant les six mêmes membres que la valeur de la RenderTransform propriété :
<Path Stroke="Black"
Aspect="Uniform"
HorizontalOptions="Center"
RenderTransform="1.5 1 0 1 10 100"
Data="M13.908992,16.207977L32.000049,16.207977 32.000049,31.999985 13.908992,30.109983z" />