Pregunta Gráficos vectoriales en Android


Estoy trabajando en una aplicación que muestra la base de datos de imágenes de otra persona. Las imágenes que tienen son todas vectoriales y se pueden convertir a cualquier formato, sin embargo mantenerlas en formato vectorial es bueno porque los usuarios probablemente querrán acercarse más.

La pregunta es, ¿existe una forma incorporada de mostrar un gráfico vectorial en Android? El formato no importa, podemos convertir. El formato actual que estamos considerando es PDF, pero dado que no hay soporte de PDF nativo, tendría que hacer algo bastante complejo para que funcione (por ejemplo, integrar Poppler en mi aplicación a través del NDK). La alternativa es simplemente convertir los gráficos vectoriales en un formato más simple (JPG, GIF), pero prefiero evitar eso.


32
2017-10-25 14:44


origen


Respuestas:


Revisa svg-android - Es una biblioteca relativamente nueva y solo es compatible con SVG Basic, pero es la biblioteca utilizada para dibujar Androidify. Hay ejemplos en la página de inicio sobre cómo obtener un Drawable de un SVG que parece ser lo que está buscando.


20
2018-06-01 14:06



Creando Vector Drawables.


Sé que esta pregunta es antigua, pero me encontré con este mismo requisito y estoy feliz de saber que Android 5.0 es compatible con los vectores arrastrables ahora. Puedes usar <vector> datos de etiqueta y ruta para crear vectores dibujables y funciona como un encanto en API-21. Aquí hay un ejemplo que produce una imagen vectorial en forma de corazón.

<!-- 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>

El único problema al que me enfrenté hasta ahora es que no está incluido en las bibliotecas de soporte, por lo que no puede usarlas en API inferiores. Lo maravilloso es que, incluso puedes animar vectores arrastrables ahora. Aquí hay un ejemplo.

<!-- 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>

Leer más sobre animación vectorial dibujable aquí.


7
2017-11-05 03:22



TinyLive SVG proporciona un visor SVG para Android. No lo he probado, así que no tengo idea si es bueno o no.

Leyendo esta solicitud de error parece que SVG podría estar habilitado en el navegador, y por lo tanto, presumiblemente WebView también - en Gingerbread. Pero dado que esta es una característica posible en futuras versiones, probablemente ahora no sea de mucha ayuda.


4
2017-10-25 14:48



Mira el BetterVectorDrawable Lib junto con el Convertidor de SVG a VectorDrawable.

BetterVectorDrawable es la implementación VectorDrawable para Android 4.0+ con comportamiento de repliegue configurable en Android 5.0+.

Convertidor de SVG a VectorDrawable es el convertidor por lotes de imágenes SVG a archivos de recursos Android VectorDrawable XML. La versión en línea es aquí.

Los enlaces apuntan a readmes, que proporcionan suficiente información sobre cómo usar lib y el convertidor.


3
2017-09-10 12:34



Un autoenchufe desvergonzado, pero tal vez te interese ribbon-vg? Es básico, puro Java y rápido; confiando en técnicas de vanguardia para descargar la CPU en el proceso de renderizado.


0
2018-04-05 22:45



Esta pregunta es vieja. Pero espero que mi respuesta ayude a los futuros visitantes aquí.

Colocamos archivos VectorDrawable en una carpeta dibujable. AnimatedVectorDrawable también es dibujable. Por lo tanto, colocamos estos archivos también en una carpeta dibujable. A continuación hay ejemplos de los dos:

vd_omega.xml

    <vector 

        xmlns:android="http://schemas.android.com/apk/res/android"
                android:width="1536dp"
                android:height="864dp"
                android:viewportWidth="1536.0"
                android:viewportHeight="864.0">

            <path
                android:name="my_vector"
                android:pathData="M  162   8
                q    -07    00   -41    26
                q    -34    27   -50    64
                q    -25    59   -19   117
                q     07    70    53   121
                q     57    63   151    62
                q     87   -01   140   -66
                q     46   -55    48  -142
                q     01   -56   -34  -105
                q    -38   -52   -77   -70
                l    -29   -11
                q     16   -01    31   -02
                q     59   -01   119   -02 "

                android:strokeLineCap="round"
                android:strokeColor="#f00f"
                android:fillColor="#00000000"
                android:strokeWidth="32"
                android:trimPathEnd="0"/>



        </vector>

avd_omega_animator.xml

<animated-vector
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:drawable="@drawable/vd_number8">

    <target
        android:name="my_vector"
        android:animation="@animator/trimpath_animator"/>       



</animated-vector>

Luego puedes animar usando un archivo animator como el siguiente:

trimpath_animator.xml

<set xmlns:android="http://schemas.android.com/apk/res/android">

<objectAnimator
android:propertyName="trimPathEnd"
android:duration="1000"
android:valueFrom="0"
android:valueTo="1"
android:repeatCount="0"
android:repeatMode="reverse"/>
</set>

Puede tener más animadores en el mismo archivo para varias propiedades.

En tu archivo de diseño

activity_main.xml

<RelativeLayout
    xmlna:android="http://schemasandroid.com/apk/res/android"
    xmlna:app="http://schemasandroid.com/apk/res-auto"
    xmls:tools="http:schemas.android.com/tools"
    android:id="@+some_id"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    tools:context=".MainActivity">

    <ImageView
    android:id="@+id/my_image"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:src="@drawable/avd_omega_animator"/>

</RelativeLayout>

En su actividad, escriba el siguiente código en onCreate:

importar ... importar ...

public class MyActivity extends Activity{

ImageView myImage;


...
...
setContentView(R.layout.activity_main);
myImage = (ImageView)findViewById(R.id.my_image);
Drawable d = myImage.getDrawable():
if(d instance of Animatable){
d.start;
}

y mira la diversión.

Así como utilicé getDrawable anteriormente, también puede usar otros métodos para colocar objetos dibujables en ImageView como setImageDrawable ("d"), etc.

También puede consultar "Introducción a las técnicas de animación de iconos" del Sr. Alex Lockwood en:

https://www.androiddesignpatterns.com/2016/11/introduction-to-icon-animation-techniques.html

para buenos ejemplos.

Espero darte una respuesta útil.

Todo el código de ejemplo que di más arriba funciona. También es simple y directo.


0
2018-04-01 07:07