web-dev-qa-db-fra.com

Affichage des fichiers SVG dans Android

Je veux créer une application qui affichera la position sur un plan d'étage. La navigation est implémentée via le WiFi d'une certaine manière, je l'ai fait et maintenant j'ai un problème d'affichage du plan d'étage.

Il pourrait être dans un format vectoriel, après avoir navigué sur Internet pendant un certain temps, j'ai décidé qu'il devait s'agir d'un fichier svg. J'ai trouvé des solutions, mais ça ne marche pas pour moi!

  1. Bibliothèque svg-Android

    Il est possible d'afficher des fichiers .svg, mais uniquement des fichiers "simples". Cela fonctionne très bien uniquement pour le fichier du didacticiel, mais pas pour tout autre .svg fichier (par exemple, un autre fichier que vous créerez avec Inkscape).

    Alors, j'ai décidé que je vais analyser .svg fichier, faites-en un DOM, obtenez en quelque sorte des objets et des attributs et dessinez-le via OpenGL ES.

  2. Apache Batik

    À première vue, très bonne solution, mais il y a un problème. Android a des bibliothèques Apache "natives" et quand j'essaie de faire quelque chose avec batik, il lance NoClassDefFoundError, parce qu'il ne cherche pas dans les bibliothèques batik, mais dans les bibliothèques "natives" .

    Bien sûr, nous pouvons ajouter du code source dans notre projet, ne prendre que l'analyseur batik pour .svg fichiers et les éditer d'une manière ou d'une autre, mais il y a beaucoup de travail, avec le même succès, nous pouvons écrire notre propre analyseur.

  3. Petite ligne

    Il n'y a pas de version d'essai, mais si nous voir la description de la façon dont cela fonctionne pour les fichiers svg et Android, nous verrons qu'il n'y a que la pixellisation de ces fichiers et c'est tout.

Y a-t-il une meilleure solution que d'écrire son propre analyseur? Quelqu'un a-t-il rencontré ce problème?

25
Mary Ryllo

Je suggère d'utiliser # 1. N'écrivez pas votre propre analyseur. Ça va juste être un énorme mal de tête.

Dans quelle mesure votre plan d'étage doit-il être détaillé? Android-svg prend assez bien en charge SVG. Il n'a tout simplement pas un bon support pour les filtres ou les sources de lumière. Votre SVG ne va pas en avoir (j'espère).

Si vous ne voulez pas faire cela, regardez dans les arbres quadruples. Vous pouvez restituer une image énorme et la décomposer en un format de type quadtree, puis charger uniquement les quads dont vous avez besoin.

11
Brad

J'ai créé un libaray SVG pour Android le site Web est http://www.vectoroid.com

la principale chose qui manque est le support de l'arc SVG qui est actuellement corrigé et sera dans une version dans un avenir proche.

Je suis à la recherche de commentaires à ce sujet, car j'y travaille depuis environ un an. Donc, si vous en avez, dites-le ...

4
siliconeagle

J'utilise encore un autre SVG pour Android ; semble qu'il est relativement nouveau.

GPLv3, prise en charge CSS2, polices, textes et étendues, dégradés linéaires et radiaux, SVG et SVGZ, prise en charge du filtrage initial, images des ressources, des images Web et en ligne encodées en base64. Le plus rapide de tout ce que j'ai essayé.

Bien sûr, le support des filtres pourrait être meilleur, mais à part cela, il fonctionne bien et affiche même des fichiers SVG de 20 mégaoctets.

1
Victor