web-dev-qa-db-fra.com

Création et utilisation d’images à 9 patchs sous Android

J'ai récemment entendu parler d'images à 9 patchs. Je connais ses 9 en mosaïque et est extensible. J'aimerais en savoir plus à ce sujet.

  • Comment créer une image de 9 patchs?

    Y a-t-il un outil? Puis-je le créer à partir d'AndroidSDK ou d'un code?

  • Principaux avantages de la version 9-patch par rapport au format png classique?

    (est-il extensible dynamiquement/automatiquement en fonction de l'écran?)

45
Nizam

Aujourd'hui, j'ai découvert neuf images de patch. La documentation officielle (liée aux autres réponses) est correcte, mais les exemples manquent vraiment.

Ce petit tutoriel a quelques bons exemples à la fin qui répondent à la deuxième partie de votre question, expliquant comment la mise à l'échelle fonctionne - pas seulement pour les boutons - mais aussi pour les cadres, et propose un exemple complet de projet que vous pouvez télécharger joue avec. L'avantage le plus important par rapport au format PNG est que neuf images de correctif peuvent spécifier des zones non contiguës à mettre à l'échelle.

Pour répondre à la première partie de votre question, le SDK (et désormais Android Studio) est livré avec "Draw 9-patch" ("draw9patch" dans le dossier Outils du SDK), qui est un simple éditeur. Voici un plus gentil qui est également open source. Il a une image par défaut simple mais intelligente.

39
Nick Westgate

La plupart des exemples parlent de la création d'une image de 9 correctifs, mais les détails de la mise en œuvre restent généralement à un niveau élevé. 

Le post de Nick ci-dessus - avec le bon tutoriel de 9 correctifs qui fournit un fichier de téléchargement de projet fonctionnel, enregistré le jour.

Voici les principaux détails d’implémentation qui ont fonctionné pour moi (une fois que vous avez une image de 9 correctifs prête à l'emploi):

  1. Référencez le dessinable avec le nom mais n'incluez pas .9.png (l'auto-complétion dans Eclipse s'en chargera)

  2. Assurez-vous de n'avoir qu'une seule image dans le dossier principal/pouvant être dessiné (pas une version pour chaque dossier dpi)

  3. L'image doit être spécifiée en utilisant: background, not: src (cela m'a bloqué pendant un moment)

    Android:background="@drawable/splash_logo"

  4. Assurez-vous que l'image et la mise en page qui la contient utilisent: 

    Android:layout_width="fill_parent"
    Android:layout_height="fill_parent"

20
Gene Bo

Comment créer une image de 9 patchs? Y a-t-il un outil? Puis-je le créer à partir d'AndroidSDK ou d'un code?

Lorsque vous recherchez un moteur de recherche majeur pour Android 9-patch tool, le tout premier résultat est celui de la page de documentation pour les développeurs Android de l'outil draw9patch .

Principaux avantages de la version 9-patch par rapport au format png classique? (est-il extensible dynamiquement/automatiquement en fonction de l'écran?)

La documentation pour les développeurs Android contient d’autres pages qui décrivent des fichiers PNG de neuf correctifs . Cette documentation comprend des passages tels que:

Un graphique NinePatchDrawable est une image bitmap extensible, qu'Android redimensionnera automatiquement pour l'adapter au contenu de la vue dans laquelle vous l'avez placée à l'arrière-plan. Un exemple d’utilisation d’un NinePatch est l’arrière-plan utilisé par les boutons Android standard - les boutons doivent s’étirer pour accueillir des chaînes de différentes longueurs.

9
CommonsWare

Avec une image de 9 patchs, vous pouvez choisir quelle partie de votre image peut être étirée . Ce doit être une image png et son nom doit se terminer par .9.png (quelque chose.9.png) 

http://developer.Android.com/tools/help/draw9patch.html

Outil simple pour toutes les densités:

http://Android-ui-utils.googlecode.com/hg/asset-studio/dist/nine-patches.html

6
Petr Krejčí

1.Quelles sont les images NinePatch?

Les images NinePatch sont des images PNG qui indiquent les parties d'une image pouvant être étirées. Ils ont une extension comme image_name.9.png.

2. Où sont-ils stockés dans le projet Android?

res/drawable/image_name.9.png

3.Comment créer une image NinePatch pour votre application anndroid?

Le SDK Android comprend un outil WYSIWIG draw9patch.jar dans votre dossier /tools SDK Android.

enter image description here

2
Prateek Joshi

Principaux avantages du 9-patch par rapport au png classique

En réalité, les images 9 Patch sont des images étirables et reproductibles, réduites à leur plus petite taille. L'image ne s'étire pas et ne présente pas de proportions lâches dans différentes tailles d'écran. Un autre avantage, le plus important, est la mémoire. 

La même mémoire de petite taille peut être réutilisée pour différents périphériques de taille d'écran. Les images de 9 patchs bien conçues sont moins sujettes aux erreurs et ont une grande capacité de réutilisation.

https://developer.Android.com/studio/write/draw9patch.html

1
IntelliJ Amiya

Étape 1, Puisque vous n’êtes pas encore familier, préparez une grande image pnx xxxhdpi pour la jouer en premier.

Étape 2, le champ extensible souhaité de l'image doit être aussi court que possible (en supprimant la partie colorée redondante/répétée), car le correctif en 9 étapes ne permet pas de "réduire", mais de "développer" l'image.

J'utilise personnellement l'outil de ligne de commande ImageMagick pour le convertir, par exemple:

convert -trim 'my_image.png' png32:my_image_trim.png #trim extra transparent surrounded image
rm lala*; convert my_image_trim.png -crop 310  +repage  +adjoin  png32:lala%02d.png #cut redundant/repeat center part
convert +append lala02.png lala05.png png32:out_right.png #append left/right images side by side
convert -resize 144x144\! out_right.png png32:my_image.png #resize to the desired dpi

Il y a un piège lors de la conversion: je dois utiliser le préfixe png32, sinon l'image noire à 9 points sera affichée, voir ce fil .

Étape 3, Copiez l'image sur Android Studio, puis cliquez avec le bouton droit de la souris et choisissez l'élément de menu "Créer un fichier de 9 correctifs ...". Une nouvelle image .9.png sera générée avec le même nom d'image. Maintenant, peut simplement supprimer l'image d'origine. Faites attention lorsque vous manipulez refactor pour renommer la sauvegarde car il renommera également l'id de l'image XML et vous demandera pourquoi l'image de 9 correctifs ne fonctionne pas, car XML fait toujours référence à une image autre que 9.

Step 4, les 2 lignes noires gauche et supérieure forment une zone rectangulaire extensible, tandis que les 2 lignes noires droite et inférieure forment une zone rectangulaire de texte.

La taille de votre image augmentera en fonction de la taille du texte sur votre zone extensible déclarée. Tandis que la zone de texte signifie que le texte ne permet que dans cette zone. 

Vous n'avez pas besoin de dessiner le point noir/les lignes à partir de zéro pour une utilisation simple, 4 lignes noires existaient déjà derrière le haut, le gauche, le bas, le droit sur cette image si votre image de 9 correctifs générée par Android Studio. "Zoom in" à plus grand si vous ne pouvez pas voir pour faire glisser ces lignes. 

La position initiale de 2 lignes noires, verticale et horizontale, déclare une zone extensible:

  • La position initiale de la ligne verticale gauche est comprise entre haut gauche et bas gauche 
  • La position initiale de la ligne horizontale supérieure se situe entre la gauche supérieure et la droite supérieure. 

La position initiale de 2 lignes noires, verticale et horizontale, déclare une zone de texte:

  • La position initiale de la ligne verticale droite se situe entre le coin supérieur droit et le coin inférieur droit. 
  • La position initiale de la ligne horizontale inférieure est Entre les positions inférieures gauche et inférieure droite.

Ci-dessus se trouve la position d'origine des lignes noires avant de commencer à faire glisser pour réduire la longueur, afin d'ajuster la position de départ et la position de fin de ces lignes. 

Les zones extensibles et les zones de texte peuvent être différentes selon vos besoins. Mais la zone normalement extensible devrait être égale à OR inférieure à la zone de texte, un exemple classique sera l'image de bulle de discussion:

 enter image description here

L'image ci-dessus a une largeur égale aux lignes noires supérieure et inférieure, mais la ligne noire droite est supérieure à la ligne gauche, ce qui signifie également que le texte reste constamment jusqu'à la moitié de la courbe inférieure, que ce soit en taille minimale ou étendue. Et cela ne fait que s'étendre dans le corps de la zone de texte. 

Vous allez maintenant connaître les deux avantages de 9-Patch: la ligne inférieure et la ligne droite forment ensemble une zone de texte qui garantit que le texte ne débordera jamais à l’extérieur de la courbe de l’image! Et aussi défini la partie de la zone de texte chargée d’agrandir l’image à mesure que le texte grandit, tout en maintenant la courbe sans redimensionner.

Survolez la ligne pour voir les positions x, y en pixels, cela vous aidera à mesurer que les deux lignes sont égales ou moins en position.

Vous devez vous rappeler de la position de la ligne lors du glissement, car la ligne gauche peut glisser vers le côté droit et la ligne droite en faisant glisser le côté gauche, et vous risquez de perdre la ligne qui est extensible et celle qui est la ligne de texte.

Vous devez cocher deux cases importantes, à savoir les cases "Afficher les correctifs" et "Afficher les correctifs incorrects". 

Dans la case à cocher "Afficher les correctifs", si vous dessinez la zone extensible mais recouvrez la ligne courbe de votre image au lieu d'une ligne droite, cette zone sera marquée en rouge pour vous avertir. Vous pouvez restreindre votre ligne pour ignorer cet avertissement rouge ou simplement l'ignorer. N'oubliez pas que l'avertissement rouge peut induire en erreur, ce qui peut en réalité être causé par la ligne opposée. Dans ce cas, vous devez affiner la ligne opposée pour rejeter cet avertissement rouge.

Step 5, En XML, vous pouvez faire référence à cette image en tant qu'arrière-plan TextView, comme ci-dessous. Utilisez wrap_content pour la rendre extensible:

<LinearLayout
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:background="@drawable/your_9_patch_image_name_excluded_.9"
    Android:orientation="vertical">
    <TextView
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        />
    <2nd TextView />
</LinearLayout>

Lorsque vous la manipulez pour la première fois, veillez à ne pas insérer de texte dans une vue de texte ou une mise en page parent élégante, sinon vous pouvez vous demander pourquoi ne pas travailler comme prévu.

Exemple de fond de bouton:

    <Button
        Android:id="@+id/btn2"
        Android:layout_width="wrap_content"
        Android:layout_height="40dp"
        Android:background="@drawable/your_9_patch_image_name_excluded_.9"
        Android:layout_gravity="center"
        />
1
林果皞

C'est un bon outil: Cliquez ici.

9 Les images de patch sont des images étirables et reproductibles, réduites à leur plus petite taille. L’exemple le plus simple serait de prendre un div arrondi et de le découper en 9 carrés comme un tableau de tic-tac-toe. Les quatre coins ne changeraient pas du tout la taille mais seraient statiques tandis que les 5 autres pièces seraient étirées ou répétées pour permettre à l’ensemble de l’image de s’agrandir de manière appropriée.

Avec cette explication et l’avènement de CSS3, vous pourriez penser qu’il n’ya aucune raison d’utiliser 9 images de patch, mais le nom «9 patch» est impropre. Les images peuvent être découpées en morceaux encore plus petits.

9 Les images de patch contiennent un index indiquant quelle pièce correspond à quoi en ajoutant une bordure de 1px à l'image. Les couleurs dans la bordure déterminent si une pièce est statique (sans échelle), s’étire ou se répète.

Google Slideshow: https://docs.google.com/present/view?id=dc7ghz8w_34f8338rcg

Consultez également les informations sur les développeurs Android concernant les images de 9 correctifs: http://developer.Android.com/guide/topics/graphics/2d-graphics.html#nine-patch

0
Roga Men