2 votes

Utiliser SVG comme ressource d'une vue d'image dans Android

J'ai des difficultés à utiliser un fichier SVG comme fichier source pour une imageView. Je suis en train de construire une application avec des milliers de dessins SVG. Cela fonctionne lorsque je les enregistre dans le dossier drawable, mais je ne veux pas me retrouver avec un énorme APK. Je ne sais pas si je peux les télécharger depuis un serveur en tant que fichier, mais je ne peux pas les définir comme source pour la vue Image (j'essaie de faire quelque chose de similaire à ceci, mais avec SVG).

Bitmap temp = BitmapFactory.decodeFile("file path");
        centerImage.setImageBitmap(temp);

mais avec un fichier SVG (qui est sauvegardé en XML). J'ai cherché sur Stackoverflow mais la seule solution que j'ai vue était de l'enregistrer en tant que ressources, ce que je préfère éviter.

1voto

Anton Shilov Points 23

Malheureusement, il n'existe pas de moyen simple de dessiner des SVG sur Android. Je vous recommande de les convertir en AndroidVectorDrawable . Vous pouvez le faire par lots en utilisant SVG Android vers VectorDrawable ou un par un dans Vector Asset Studio .

1voto

YuvalFreund Points 31

Comment j'ai résolu le problème à la fin (avec l'aide d'Amir MB) : J'ai téléchargé le SVG en tant que fichier depuis le serveur, c'est ainsi que j'ai utilisé le fichier pour le mettre dans une ImageView :

//file arrives from server
try{
    fileInputStream = new FileInputStream(file);
                    try {
                        Bitmap bitmap = Bitmap.createBitmap(dummyImage.getWidth(),dummyImage.getHeight(), Bitmap.Config.ARGB_8888);
                        canvas = new Canvas(bitmap);
                        SVG svg = SVG.getFromInputStream(fileInputStream);
                        svg.setDocumentHeight(dummyImage.getWidth());
                        svg.setDocumentWidth(dummyImage.getHeight());
                        svg.renderToCanvas(canvas);
                        dummyImage.setImageBitmap(bitmap);
                    }catch(SVGParseException S){
                        S.printStackTrace();
                    }
}catch(IOException e) {
                    e.printStackTrace();
                }

0voto

Amir MB Points 1117

Vous pouvez obtenir le SVG à partir d'un flux d'entrée (probablement dans un fichier AsyncTask ) et la convertir en Drawable :

SVG svg = SVGParser.getSVGFromInputStream(inputStream);
Drawable drawable = svg.createPictureDrawable();
centerImage.setLayerType(View.LAYER_TYPE_SOFTWARE, null); //turnnig on software rendering
centerImage.setImageDrawable(drawable);

Vous pouvez également activer le rendu logiciel en XML :

android:layerType="software"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X