Maui: [Spec] Ombres

Créé le 18 mai 2020  ·  3Commentaires  ·  Source: dotnet/maui

Ombres

Les ombres créent des repères visuels dans l'interface, ce qui aide le cerveau humain à différencier l'élément d'interface utilisateur que l'utilisateur voit. Et c'est la raison pour laquelle les concepteurs mobiles préfèrent incorporer des ombres dans leurs conceptions.

shadows

API

La classe DropShadow permet de créer une ombre configurable qui peut être appliquée à un Layout .

Propriétés

  • Rayon : Le rayon du flou gaussien utilisé pour générer l'ombre.
  • Couleur : La couleur de l'ombre.
  • Décalage : Décalage de l'ombre par rapport à son Layout.
  • Opacité : L'opacité de l'ombre.
public class DropShadow : BindableObject
{
    public static readonly BindableProperty RadiusProperty = BindableProperty.Create(
        nameof(Radius), typeof(double), typeof(DropShadow), 10.0d);

    public double Radius
    {
        get => (double)GetValue(RadiusProperty);
        set => SetValue(RadiusProperty, value);
    }

    public static readonly BindableProperty ColorProperty = BindableProperty.Create(
        nameof(Color), typeof(Color), typeof(DropShadow), Color.Black);

    public Color Color
    {
        get => (Color)GetValue(ColorProperty);
        set => SetValue(ColorProperty, value);
    }    

    public static readonly BindableProperty OffsetProperty = BindableProperty.Create(
        nameof(Offset), typeof(Point), typeof(DropShadow), new Point(1, 1));

    public Point Offset
    {
        get => (Point)GetValue(OffsetProperty);
        set => SetValue(OffsetProperty, value);
    }

    public static readonly BindableProperty OpacityProperty = BindableProperty.Create(
        nameof(Opacity), typeof(double), typeof(DropShadow), 1.0d);

    public double Opacity
    {
        get => (double)GetValue(OpacityProperty);
        set => SetValue(OpacityProperty, value);
    }
}

Scénarios

Voyons un exemple utilisant C#, XAML et CSS.

Exemple C#

var layout = new Grid();

var shadow = new DropShadow ();
shadow.Radius = 12;
shadow.Color = Color.Red;
shadow.Offset = new Point (12, 18);
shadow.Opacity = 0.75d;

layout.Shadow = shadow;

Exemple XAML

<Grid>
     <Grid.Shadow>
          <DropShadow
               Radius="12"
               Color="Red"
               Offset="12, 18"
               Opacity="0.75" />
     </Grid.Shadow>
</Grid>

Exemple CSS

box-shadow: 12px 18px 12px 12px red;

Rétrocompatibilité

Nous avons déjà des ombres dans certaines des mises en page Xamarin.Forms. La propriété HasShadow de Frame deviendrait obsolète (elle pourrait toujours être utilisée, bien que l'utilisation de la propriété Shadow soit recommandée).

Portée

Dans cette spécification, nous ajoutons des ombres aux différentes mises en page Xamarin.Forms . Des contrôles spécifiques, comme un Label, n'entrent pas dans le champ d'application (ils pourraient venir plus tard).

Difficulté : Moyenne

enhancement proposal-open

Commentaire le plus utile

Impressionnant! J'aimerais vraiment voir cette fonctionnalité. Cependant, je pense que nous pouvons en profiter pour améliorer un peu plus cela en ajoutant des capacités d'ombre dégradée.

image

Comme @jsuarezruiz l'a mentionné ici : https://github.com/dotnet/maui/issues/11

Ma recommandation est d'améliorer la propriété "Couleur" pour utiliser les nouveaux "Pinceaux" pour les dégradés et les couleurs unies.

Échantillon

<Grid>
     <Grid.Shadow>
          <DropShadow
               Radius="12"
               Offset="12, 18"
               Opacity="0.75">
               <DropShadow.Color>
                 <LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,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>
               </DropShadow.Color>
          </DropShadow>
     </Grid.Shadow>
</Grid>

Qu'est-ce que tu penses?

Tous les 3 commentaires

Ça a l'air super !

Impressionnant! J'aimerais vraiment voir cette fonctionnalité. Cependant, je pense que nous pouvons en profiter pour améliorer un peu plus cela en ajoutant des capacités d'ombre dégradée.

image

Comme @jsuarezruiz l'a mentionné ici : https://github.com/dotnet/maui/issues/11

Ma recommandation est d'améliorer la propriété "Couleur" pour utiliser les nouveaux "Pinceaux" pour les dégradés et les couleurs unies.

Échantillon

<Grid>
     <Grid.Shadow>
          <DropShadow
               Radius="12"
               Offset="12, 18"
               Opacity="0.75">
               <DropShadow.Color>
                 <LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,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>
               </DropShadow.Color>
          </DropShadow>
     </Grid.Shadow>
</Grid>

Qu'est-ce que tu penses?

Cela pourrait être génial d'ajouter plusieurs Shadow pour la conception neuromorphique.
C'est la nouvelle mode...

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

ghost picture ghost  ·  7Commentaires

qcjxberin picture qcjxberin  ·  5Commentaires

jsuarezruiz picture jsuarezruiz  ·  7Commentaires

handicraftsman picture handicraftsman  ·  4Commentaires

njsokalski picture njsokalski  ·  6Commentaires