2016-08-22 2 views
2

J'essaye de charger des drawables de vecteur des capitaux.VectorDrawable createFromStream ne semble pas fonctionner

Il fonctionne très bien quand j'utilise des fichiers .png:

final String name = "image.png"; 
final InputStream stream = context.getAssets().open(name); 
drawable = Drawable.createFromStream(stream, name); 
stream.close(); 

J'ai essayé avec VectorDrawable.createFromStream() et VectorDrawableCompat.createFromStream(), mais les deux renvoient toujours nulle.

Lorsque j'ajoute le vecteur traitable aux ressources de mise en plan, il peut être chargé sans problème.

J'ai également essayé d'utiliser le fichier binaire xml qui est créé lors de l'ajout du fichier vectoriel aux ressources drawables. J'utilise le niveau 24 de l'API et la prise en charge des bibliothèques 24.2.0 avec Android 5.1.1 pour tester cela. Cela devrait fonctionner sur Android 4.2 et plus tard.

Est-ce que quelqu'un sait comment résoudre ce problème?

Cette question pourrait se rapporter à celle-ci: Load a vector drawable into imageview from sd card

Répondre

2

Après avoir regardé le code source Android J'ai trouvé une solution. La méthode createFromStream ne semble pas prendre en charge les drawables vectoriels. Parce qu'il utilise une BitmapFactory.

mais nous pouvons les charger en tant que ressource xml:

final XmlResourceParser parser = context.getAssets().openXmlResourceParser("assets/folder/image.xml"); 
drawable = VectorDrawableCompat.createFromXml(context.getResources(), parser); 

Le image.xml musst un fichier xml binaire précompilé. Vous pouvez les extraire du fichier apk généré lorsque vous ajoutez le vecteur dessinable aux ressources dessinables.

Le problème avec cette approche est, qu'il a besoin d'Android 5. Mais j'ai besoin d'un code de travail pour Android 4.2. Quelqu'un a une idée?

+0

Avez-vous enfin trouvé une solution pour Android <5.0? –

+0

Non, je n'ai trouvé aucune solution. En ce moment j'utilise pngs pour les anciens appareils. – Rocket

+0

Ok merci. Je pense que je vais utiliser les png aussi comme solution de repli. –