Créer un contr ôle ré 100% 사마린 이용 가능.표, 섹션 1

Dans cet article“from scratch”en deux parties,je vous présente une manière simple de créer une image circulaire avancée et réusilizableápartir de zéro,sans custom renderer,ni bibliothèque tierce.
Partie 1 :
  • Créer une image circulaireál'aide de la propriétéClipet desGeometryrécement apparues dansXamarin.Forms
  • Afficher un indicateur d'activitépendent le chargement de l'image
  • Afficher une image de substitution en cas d'deposition d'image ou d'url invalide en usiliant la technology de de 迭gans uneGrid
  • Afficher une bordure autour de l'imageál'aide desShape,autre nouveautédeXamarin.Forms
  • USERR desfonctionnalités expérimentalesavec la version stable actuelle deXamarin.Forms
  • Partie 2 :

  • Créer un contr ôle r é 이용 가능 et 호환 MVVM
  • Définir des propriétés bindables(BindableProperty)
  • 이용자lesConverters
  • Les présentations sont faites,place au concret.

    Certaines fonctionnalités comme les Shapes et leurs Geometries nécessitent Xamarin.Forms 4.8 ou supérieure, pensez bien à mettre-à-jour le package après avoir créé votre solution !


    공공 재정


    파스드 궁금증, je vous livre d'emblé e un visuel pour que vous sachiez o u je vous amène.Celui ci simule une 페이지 연락처:
    Démonstration de l'image circulaire avec ses différentes options
    Niveau contenu,la page affiche une liste de contacts NOT chaque photo provient d'une source différente:
  • Une photo chargéeápartir d'Une url
  • Une photo Ajuteée au projet en tant que ressource
  • Pas de photo
  • Une photo pointant sur Une url retournant Une erreur 404
  • Une url의 Une photo pointant에 액세스할 수 없음
  • Les trois derniers cas présentent une image de substitution par défaut car aucune photo valide ne peutêtre affichée.
    Les contacts enregistrés comme favoris sont signalés par une bordure jaune autour de la photo.
    마지막으로, 나는 너의 사진을 보았고, 나는 너의 사진을 보았고, 나는 너의 사진을 보았다.형식 choueáchargerles 이미지.
    Mais je vous vois frétiller d'anpatience,vousêtes venu ici pour voir du code,alors allons-y

    편집 편집, dé coupage de l'image


    Plutôt que de vous livrer de gros blocs de code illibles sur une page web,je vais dans cet article aller directementál'essentiel,vous trouverez le code complet sur moncompte GitHub,comme d'habitude.
    오히려 추천인, 평론자, 사진 돌려보기?
    우리는 deux fonctionnalités apparuesdernièrement dans Xamarin을 사용합니다.형식, lapriétéClip(découper enanglais)etlesGeometries.Clipest une propriétédesVisualElements,de typeGeometryet qui définit le contour du contenu d'unélément visuel.
    클레어야?예를 들어,celui qui nous concerne:j'ai une image carr é e et je souhaite afficher uniquement son contenu inscrit dans Un cercle.Je vais donc définir uneGeometrycirculaire et l'appliqueráClippour découper l'image selon cette forme.
    les yeux, voici le code:
    <Image Source="monimage.png" width="200" Height="200">
        <Image.Clip>
            <EllipseGeometry RadiusX="100"
                             RadiusY="100"
                             Center="100,100" />
        </Image.Clip>
    </Image>
    
    La géométrie circulaire n'existant pas,nous nous baserons sur une eliple.Celle ci se dé finit á partir d'un center et de deux rayons, 수평RadiusX과 수직RadiusY.거꾸로 obtenir uncercle, il sulfitqueRadiusXetRadiusYaient la même valer.Centerpermet de Positioner l'ellipse par reportáson contenant.
    계산과 위치를 간소화하고 자신의 이미지를 드러내다.
    Pour obtenir un cercle centr é et inscrit dans le carré,les rayons seront moiti é plus petits que le cøt é de l'image와 le center du cercle sera au centre de l'image.
    봐라, obtenir une image circulaire c'est devenu aussi simple que a avec Xamarin.형식Beaucoup de texte et d'explications pour quelque는 devenu finalement assez 자질구레함을 선택했습니다!

    L'image 교체


    댓글 faire pour afficher une image par dé faut quand il n'y a pas d'image á afficher?
    va USER une TECHNOLOGY ANCIENE et bien connue mais toujours très utile: l'empilement dans uneGrid에 관하여.Leséléments contenus dans une même cellule d'une Grid se superpristed Les uns sur Les autres,le dernier déclarédans le fichier Xamlétant au dessus,la touch de celui ciétant séquentielle.
    Nous allons donc définir une Gridáune seule cellle et y ajour deuxImages:la première est destinéeáafficher l'image de substitution,la secondeáafficher l'image proprement dite.
    Pour que les deux images se superperssent sans décalage,il est nécessaire que les deux composantsImageet leurs ellipes aient les mêmes dimensions.
    Nous renseigneronségalement les propriétésHorizontalOptionsetVerticalOptionsde la Grid avec des valeurs qui forcefront celle ciáadopter les mêmes dimensions que son contenu.

    DRY - Je vais avoir besoin de créer deux fois une image circulaire simple, et il est probable que ce besoin se répète dans d'autres contextes. J'ai donc créé un contrôle CircleImage simple encapsulant le code précédent. Nous verrons dans la seconde partie de l'article comment créer un contrôle réutilisable.


    <Grid HorizontalOptions="Center" VerticalOptions="Center">
        <local:CircleImage Source="monPlaceholder.png" ImageSize="128" />
        <local:CircleImage Source="monImage.png" ImageSize="128" />
    </Grid>
    
    De cette manière,l'image vient cacher le placeholder si elle est disponible,sinon on voit ce dernierála place.

    L'indicateur de chargement 표시등


    Aujourd'hui c'est atelier empilage,nous allons encore Superciser:ajoutons unActivityIndicatora notre Grid.
    L'ActivityIndicator은 서로 다른 로봇과 iOSmais le principe reste le mème: c'est un bidule qui tourne de façon hypottique pour faire oublier le temps qui passe á L'utisateur.Pour le voir tourner,il Suffet d'affecterTruea sa propriétéIsRunning.
    <Grid>
        <local:CircleImage x:Name="monPlaceholder" ImageSize="128" />
        <local:CircleImage x:Name="monImage" ImageSize="128" />
    
        <ActivityIndicator IsRunning="True"
                            VerticalOptions="Center"
                            HorizontalOptions="Center"
                            />
    </Grid>
    
    Nous avons donc un indicateur qui tourne au CENTER de notre 이미지.C'est bien,mais il tourne en permanence and nous aurions besoin de l'activer uniquement 펜던트 le chargement de l'image.
    Cela tombe bien, le contr ôleImage expose une propriétéIsLoading qui vautTrue 펜던트 le chargement de l'image etFalse une fois le chargement termine,peu importe que l'opérationce soit bien dé roulée ou non.
    Reste une 질문: 댓글 lier la propriétéIsRunning de l'indicateur á la propriétéIsLoading de l'image?Par unBindingbien entendu!Mais comment binder une propriétéd'un contrôleáune propriétéd'un autre contrôle?이것은 연결된 원본 코드입니다!
    Le plus simple ici est de donner un nom expliciteánotre contrôLe Image(monImage par example)et de se référeráce nom comme source du Binding.La propriétévisée sera définie commePathdu Binding:"{Binding Source={x:Reference monImage}, Path=IsLoading}"Avec un peu plus de contexte,cela donne:
    <Grid>
        <local:CircleImage x:Name="monPlaceholder" ImageSize="128" />
        <local:CircleImage x:Name="monImage" ImageSize="128" />
    
        <ActivityIndicator IsRunning="{Binding Source={x:Reference monImage}, Path=IsLoading}"
                            VerticalOptions="Center"
                            HorizontalOptions="Center"
                            />
    </Grid>
    
    
    De cette façon,nous verrons un indicateur De chargement tournoyer au centre De l'image durant le chargement De celle ci.
    Et pourtant,elle tourne!

    라보두르


    Pour afficher une bordure autour de l'image,nous allons tirr parti des Shapes encore sous forme expérimentale sous Xamarin.표 4.8.
    Si-la 버전 de Xamarin.표 que vous USERIZ n'int è gre pas encore lesShapes de fa çon officielle,vous devrez dé clarer la fonctionnalit é expé rimentale dans le constructure de la classeApp.xaml.cs sous peine de lever uneInvalidOperationException au lancement de l'application:
    public App()
    {
        Device.SetFlags(new string[] { "Shapes_Experimental" });
    
        InitializeComponent();
    
        MainPage = new MainPage();
    }
    
    
    LesShapescomme leur nom l'indique sont des formes que l'on peut Ajuter en tant queVisualElementsur la page.La forme qui nous intérese est láencore uneEllipse.

    Attention à ne pas confondre l'EllipseGeometry qui est la description d'un objet géométrique, avec l'Ellipse qui est un contrôle Visuel !

    StrokeetStrokeThicknesssont les deux propriétés exposées par l'eliple qui définissent la couleur et lépaisseur de son courour.Nous n'aurons pas besoin des autres propriétés,mais Nous pourrions affiner en définissant le type de contour(pointillé…)오라 쿨러 드 렘프리저 드 엘리스.
    <Ellipse Stroke="Yellow" StrokeThickness="2" />
    
    스위트룸, c'est juste une historire d'empilage dans laGrid,vous commercez á avoir l'habitude.
    <Grid>
        <local:CircleImage x:Name="monPlaceholder" ImageSize="128" />
        <local:CircleImage x:Name="monImage" ImageSize="128" />
    
        <Ellipse Margin="0"
                 HorizontalOptions="Center"
                 VerticalOptions="Center"
                 Stroke="Yellow"
                 StrokeThickness="2"
                 HeightRequest="128"
                 WidthRequest="128"
                 />
    
        <ActivityIndicator [...] />
    </Grid>
    
    Ce qui donne:
    Une 이미지 순환 bordée de jaune

    Fin de(première)partie회사


    L'article s'avère bien plus détailléque je ne L'avis prévu au départ etça startètre bien consistant.Je vous laisse donc dig é rer tout ça et vous donne rendez vour la seconde partie dans laquelle nous verrons comment assembler tout ceci pour en faire un contr ôle r é usabled avec des propri és Bindable pour le rendre'MVVM 우호형.

    좋은 웹페이지 즐겨찾기