2010-10-25 7 views
32

Sto lavorando a un'applicazione che visualizza il database di immagini di qualcun altro. Le immagini che hanno sono tutte grafiche vettoriali e possono essere convertite in qualsiasi formato, tuttavia mantenerle in un formato vettoriale è buona perché gli utenti probabilmente vorranno ingrandire lo zoom.Grafica vettoriale in Android

La domanda è: esiste un modo integrato per visualizzare un'immagine vettoriale in Android? Il formato non ha importanza: possiamo convertire. Il formato corrente che stiamo considerando è il PDF, ma dato che non esiste un supporto nativo per i PDF, dovrei fare qualcosa di abbastanza complesso solo per farlo funzionare (ad esempio, integrando poppler nella mia app tramite NDK). L'alternativa è convertire la grafica vettoriale in un formato più semplice (JPG, GIF), ma preferirei evitarlo.

+0

Se si converte in JPG/GIF, non si perde la capacità del vettore? – user432209

+1

Questo è esattamente il problema e perché voglio evitarlo. –

risposta

20

Check out svg-android - è una libreria relativamente nuova e supporta solo SVG Basic, ma è la libreria utilizzata per disegnare Androidify. Ci sono degli esempi sulla homepage su come ottenere un Drawable da un SVG che sems sia quello che stai cercando.

4

TinyLive SVG fornisce un visualizzatore SVG per Android. Non l'ho provato, quindi non ho idea se sia buono o no.

Reading this bug request sembra che SVG potrebbe essere abilitato nel browser - e quindi presumibilmente anche WebView - a Gingerbread. Ma dal momento che questa è una caratteristica possibile nella prossima versione, probabilmente non ti è di grande aiuto ora.

7

Creating Vector Drawables.


So che questa domanda è vecchio, ma mi sono imbattuto in questa stessa esigenza e sono felice di apprendere che Android 5.0 supporta drawable vettore ora. È possibile utilizzare i dati del tag e del percorso <vector> per creare drawable vettoriali e funziona come un fascino su API-21. Ecco un esempio che produce un'immagine vettoriale a forma di cuore.

<!-- res/drawable/heart.xml --> 
<vector xmlns:android="http://schemas.android.com/apk/res/android" 
    android:height="256dp" 
    android:width="256dp" 
    android:viewportWidth="32" 
    android:viewportHeight="32"> 

    <!-- draw a path --> 
    <path android:fillColor="#8fff" 
     android:pathData="M20.5,9.5 
        c-1.955,0,-3.83,1.268,-4.5,3 
        c-0.67,-1.732,-2.547,-3,-4.5,-3 
        C8.957,9.5,7,11.432,7,14 
        c0,3.53,3.793,6.257,9,11.5 
        c5.207,-5.242,9,-7.97,9,-11.5 
        C25,11.432,23.043,9.5,20.5,9.5z" /> 
</vector> 

L'unico problema che ho affrontato finora è che, non è incluso nelle librerie di supporto, e quindi non si può fare uso di loro in API inferiori. La cosa meravigliosa è che puoi persino animare i drawable vettoriali ora. Ecco un esempio.

<!-- res/drawable/vectordrawable.xml --> 
<vector xmlns:android="http://schemas.android.com/apk/res/android" 
    android:height="64dp" 
    android:width="64dp" 
    android:viewportHeight="600" 
    android:viewportWidth="600"> 
    <group 
     android:name="rotationGroup" 
     android:pivotX="300.0" 
     android:pivotY="300.0" 
     android:rotation="45.0" > 
     <path 
      android:name="v" 
      android:fillColor="#000000" 
      android:pathData="M300,70 l 0,-70 70,70 0,0 -70,70z" /> 
    </group> 
</vector> 

Ulteriori informazioni su animazione vettoriale disegnabile here.

3

Guarda il BetterVectorDrawable lib insieme allo SVG to VectorDrawable Converter.

BetterVectorDrawable è l'implementazione VectorDrawable per Android 4.0+ con comportamento di fallback configurabile su Android 5.0+.

SVG to VectorDrawable Converter è il convertitore batch di immagini SVG in file di risorse XML VectorDrawable Android. La versione online è here.

I collegamenti puntano ai readmes, che forniscono informazioni sufficienti su come utilizzare lib e il convertitore.

0

Un plug-in senza vergogna, ma forse ti interesserebbe lo ribbon-vg? È semplice, puro Java e veloce; basandosi su tecniche all'avanguardia per alleggerire la CPU nel processo di rendering.