web-dev-qa-db-fra.com

VectorDrawable - est-il disponible d'une manière ou d'une autre pour les versions d'Android antérieures à Lollipop?

Contexte

J'ai remarqué que Android supporte maintenant une sorte de dessin vectoriel, via une classe appelée " VectorDrawable "(et aussi AnimatedVectorDrawable , BTW). J'ai trouvé à ce sujet en regardant les nouveautés de Android-Studio .

Je me demande si ce serait la fin de devoir mettre plusieurs fichiers dans plusieurs dossiers (mdpi, hdpi, xhdpi, etc.). Ce serait formidable et pourrait réduire la taille des applications dans certains cas.

Questions

J'aimerais poser quelques questions concernant cette nouvelle classe:

  1. Est-il possible de l'utiliser dans les versions antérieures Android, éventuellement via une bibliothèque contenant même la bibliothèque de support de Google?).

  2. Je ne connais pas bien son fonctionnement, mais Lollipop peut-il gérer les fichiers SVG? Peut-il faire quelque chose de réalisable sur des fichiers SVG?

  3. Existe-t-il un exemple/tutoriel/vidéo d'utilisation, autre que la documentation que j'ai trouvée?

84
android developer

UPDATE ON March 2016

Par Android Support Library 23.2.1 mise à jour, Dessins vectoriels de support et Dessins vectoriels animés. (vous pouvez également utiliser lastone pour le même)

Veuillez mettre à jour la version d'une bibliothèque dans un fichier Gradle.

compile 'com.Android.support:recyclerview-v7:23.2.1'

Les dessins vectoriels vous permettent de remplacer plusieurs ressources png par un seul vecteur graphique, défini en XML. Alors qu'ils étaient auparavant limités aux périphériques Lollipop et supérieurs , VectorDrawable et AnimatedVectorDrawable sont maintenant disponibles via deux nouvelles bibliothèques de support = support-vector-drawable et animated-vector-drawable. new app:srcCompat attribut pour référencer le vecteur.

Vérifiez la source sur github avec quelques exemples de cas .

Modifications de la bibliothèque v7 appcompat:

Dépendance rétablie à l’égard des ressources vectorielles afin que les développeurs utilisant la bibliothèque appcompat ne soient pas obligés d’utiliser VectorDrawable et ses indicateurs de construction associés.

39
Amit Vaghela

Update 2 : Ils l'activent à nouveau dans Support Library 23.4.0:

Pour les utilisateurs d'AppCompat, nous avons ajouté une API d'adhésion pour réactiver le support Vector Drawables à partir de ressources (comportement décrit dans 23.2) via AppCompatDelegate.setCompatVectorFromResourcesEnabled (true) - gardez à l'esprit que cela peut toujours entraîner des problèmes d'utilisation de la mémoire. problèmes de mise à jour des instances de configuration, d’où leur désactivation par défaut.

Vérifiez ceci 23.4.0 disponible maintenant

Update : Cela ne fonctionne pas à partir de la version 23.3.0. Vérifiez ici pour plus de détails. Les tirages par procuration ne fonctionnent pas. app:srcCompat Et setImageResource() fonctionnent cependant.


Le support Vector Drawable est disponible dans la bibliothèque de support technique de la version 23.2 et des versions ultérieures. Cependant, pour utiliser correctement ces éléments, il faut les référencer indirectement.

La première étape consisterait à supprimer la version AppCompat.

compile 'com.Android.support:appcompat-v7:23.2.0'

Deuxième Activer le support Vector Drawable. Si vous utilisez le plugin Gradle, 2.0+

Android {  
   defaultConfig {  
     vectorDrawables.useSupportLibrary = true  
   }  
}

Autrement

Android {  
   defaultConfig {  
     generatedDensities = []  
   }  

   aaptOptions {  
     additionalParameters "--no-version-vectors"  
   }  
}

Troisième , reportez-vous au lien réponse .

12
razzledazzle

Vous pouvez essayer ceci bibliothèque de support . Il prend en charge VectorDrawable et AnimatedVectorDrawable introduit dans Lollipop avec une compatibilité ascendante.

12
V_J

Pour compléter certaines des réponses fournies ici: oui, , vous pouvez obtenir de l’aide pour VectorDrawables pré-Lollipop , au moins partielle.

Comment partiel? Cela dépend - j'ai fait ce diagramme pour aider (valable pour Support Library 23.4.0 à - au moins - 25.1.0).

VectorDrawable cheatsheet

8
David Ferrand

Malheureusement, pour le moment, VectorDrawable et AnimatedVectorDrawable ne sont pas disponibles dans la bibliothèque de support. Mais pour utiliser cette fonctionnalité dans les versions de Pre-Lollipop, vous pouvez utiliser le backport non officiel appelé MrVector.

MrVector est disponible dans Github et il supportera Android versions 7+.

À partir du fichier Readme officiel

Pour ajouter une dépendance MrVector, ajoutez la ligne suivante à votre bloc de dépendances build.gradle.

compile 'com.telly:mrvector:0.2.0'

Pour créer le dessinable à partir du vecteur XML,

Drawable drawable = MrVector.inflate(getResources(), R.drawable.vector_Android);

J'espère que cela t'aides.

6
gnuanu

Lollipop ne peut pas gérer les fichiers SVG sans les bibliothèques tierces.

La meilleure solution que j'ai trouvée est le BetterVectorDrawable lib avec le SVG to VectorDrawable Converter .

BetterVectorDrawable est l'implémentation VectorDrawable pour Android 4.0+ avec un comportement de secours configurable sur Android 5.0+.

SVG en VectorDrawable Converter est le convertisseur de lot d’images SVG en Android fichiers de ressources XML VectorDrawable. En ligne.) version

Les liens pointent vers des readmes, qui fournissent suffisamment d'informations sur l'utilisation de la bibliothèque et du convertisseur.

3
A-student

Si vous utilisez VectorDrawable, Android Studio générera automatiquement les fichiers PNG correspondants (en fonction de vos fichiers XML) pour les versions de Pre-Lollipop.

Notez que ces fichiers PNG générés sont considérés comme BitmapDrawables au lieu de VectorDrawables sur les périphériques exécutant une API inférieure à 21 et ne peuvent donc pas être animés ou similaires sur ces périphériques.

Voir "compatibilité ascendante" pour plus de détails: http://Android-developers.blogspot.co.at/2015/09/Android-studio-14.html

3
Mehlyfication

Il n'y a pas de VectorDrawables dans la bibliothèque de support pour le moment.

Funkystein a raison - VectorDrawable est similaire à SVG, ne prenant en charge que les fonctionnalités de dessin vectoriel les plus demandées, de sorte que Android puisse se concentrer sur les performances. PathData, par exemple, a le même format que celui de SVG "d" chaîne.

2
George Mount

La bonne nouvelle est que Google a publié Android Support Library 23.2 Support Vector Drawables et Animated Vector Drawables!

Mais merci aux personnes qui ont porté cette bibliothèque avant Google!

C’est là que les bibliothèques AppCompat sont excellentes. Elles peuvent apporter de nombreuses nouvelles fonctionnalités de Android à des versions bien antérieures. Avec la classe VectorDrawable nouvellement implémentée, les développeurs peuvent désormais utiliser des images vectorielles Retour à l'API 7 (Android 2.1 Eclair). Les vecteurs animés sont un peu plus limités et remontent à l'API 11 (Android 3.0 Honeycomb), mais ils représentent encore plus de 97% des appareils actuellement utilisés.

Guide d'utilisation:

Reportez-vous " âge du vecteurs " par @chrisbanes

1
LOG_TAG