Cómo utilizar una imagen SVG en el ImageView

Buen Día, tengo un SVG de la imagen. ¿Cómo puedo agregar a ImageView de fondo ?

Traté de usar esta biblioteca Pero tengo un problema:

01-25 12:19:02.669 27719-27719/com.dvor.androidapp E/AndroidRuntime: FATAL EXCEPTION: main
    android.view.InflateException: Binary XML file line #70: Error inflating class com.caverock.androidsvg.SVGImageView
    at android.view.LayoutInflater.createView(LayoutInflater.java:626)
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:702)
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:761)
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:769)
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:769)
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:769)
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:769)
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:769)
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:769)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:498)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:398)
    at com.dvor.mobileapp.checkout.ShoppingCart.onCreateView(ShoppingCart.java:411)
    at android.support.v4.app.Fragment.performCreateView(Fragment.java:1786)
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:953)
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1136)
   at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:739)
   at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1499)
   at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:456)
   at android.os.Handler.handleCallback(Handler.java:730)
   at android.os.Handler.dispatchMessage(Handler.java:92)
   at android.os.Looper.loop(Looper.java:176)
   at android.app.ActivityThread.main(ActivityThread.java:5419)
   at java.lang.reflect.Method.invokeNative(Native Method)
   at java.lang.reflect.Method.invoke(Method.java:525)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1046)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:862)
   at dalvik.system.NativeStart.main(Native Method)
                                                                          Caused by: java.lang.reflect.InvocationTargetException
   at java.lang.reflect.Constructor.constructNative(Native Method)
   at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
   at android.view.LayoutInflater.createView(LayoutInflater.java:600)
   at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:702) 
   at android.view.LayoutInflater.rInflate(LayoutInflater.java:761) 
   at android.view.LayoutInflater.rInflate(LayoutInflater.java:769) 
   at android.view.LayoutInflater.rInflate(LayoutInflater.java:769) 
   at android.view.LayoutInflater.rInflate(LayoutInflater.java:769) 
   at android.view.LayoutInflater.rInflate(LayoutInflater.java:769) 
   at android.view.LayoutInflater.rInflate(LayoutInflater.java:769) 
  at android.view.LayoutInflater.rInflate(LayoutInflater.java:769) 
  at android.view.LayoutInflater.inflate(LayoutInflater.java:498) 
  at android.view.LayoutInflater.inflate(LayoutInflater.java:398) 
  at com.dvor.mobileapp.checkout.ShoppingCart.onCreateView(ShoppingCart.java:411) 
  at android.support.v4.app.Fragment.performCreateView(Fragment.java:1786) 
  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:953) 
  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1136) 
 at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:739) 
 at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1499) 
  at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:456) 
  at android.os.Handler.handleCallback(Handler.java:730) 
  at android.os.Handler.dispatchMessage(Handler.java:92) 
  at android.os.Looper.loop(Looper.java:176) 
  at android.app.ActivityThread.main(ActivityThread.java:5419) 
  at java.lang.reflect.Method.invokeNative(Native Method) 
  at java.lang.reflect.Method.invoke(Method.java:525) 
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1046) 
  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:862) 
  at dalvik.system.NativeStart.main(Native Method) 
  Caused by: java.lang.NoClassDefFoundError: com.caverock.androidsvg.R$styleable
  at com.caverock.androidsvg.SVGImageView.init(SVGImageView.java:80)
  at com.caverock.androidsvg.SVGImageView.<init>(SVGImageView.java:66)
  at java.lang.reflect.Constructor.constructNative(Native Method) 
  at java.lang.reflect.Constructor.newInstance(Constructor.java:417) 
  at android.view.LayoutInflater.createView(LayoutInflater.java:600) 
  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:702) 
  at android.view.LayoutInflater.rInflate(LayoutInflater.java:761) 
  at android.view.LayoutInflater.rInflate(LayoutInflater.java:769) 
  at android.view.LayoutInflater.rInflate(LayoutInflater.java:769) 
  at android.view.LayoutInflater.rInflate(LayoutInflater.java:769) 
  at android.view.LayoutInflater.rInflate(LayoutInflater.java:769) 
  at android.view.LayoutInflater.rInflate(LayoutInflater.java:769) 
  at android.view.LayoutInflater.rInflate(LayoutInflater.java:769) 
  at android.view.LayoutInflater.inflate(LayoutInflater.java:498) 
  at android.view.LayoutInflater.inflate(LayoutInflater.java:398) 
  at com.dvor.mobileapp.checkout.ShoppingCart.onCreateView(ShoppingCart.java:411) 
  at android.support.v4.app.Fragment.performCreateView(Fragment.java:1786) 
  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:953) 
  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1136) 
 at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:739) 
  at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1499) 
   at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:456) 
   at android.os.Handler.handleCallback(Handler.java:730) 
   at android.os.Handler.dispatchMessage(Handler.java:92) 
   at android.os.Looper.loop(Looper.java:176) 
   at android.app.ActivityThread.main(ActivityThread.java:5419) 
   at java.lang.reflect.Method.invokeNative(Native Method) 
   at java.lang.reflect.Method.invoke(Method.java:525) 
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1046) 
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:862) 
   at dalvik.system.NativeStart.main(Native Method)

 

Lo que hice ?

En primer lugar, he añadido dependency a gradle:

compile 'com.caverock:androidsvg:1.2.1'

En segundo lugar, he cambiado ImageView a com.caverock.androidsvg.SVGImageView

 <com.caverock.androidsvg.SVGImageView
         android:id="@+id/recentlyViewed_imgView"
         android:layout_width="100dp"
         android:layout_height="100dp"
         svgimageview:svg="clock.svg"
         />

Después de que he añadido xmls:svgimageview a raíz de la presentación:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:svgimageview="http://schemas.android.com/apk/res-auto"
    android:id="@+id/rowItem"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#272727"
    android:clickable="true"
    android:orientation="vertical">

Este clock.svg es en el assets carpeta.

InformationsquelleAutor VLeonovs | 2016-01-25

6 Kommentare

  1. 99

    En el nuevo Android Studio existe la posibilidad de importar SVG para archivo XML, por lo que no es necesario el uso de la biblioteca externa.

    En dibujable click derecho -> Nuevo -> Vector de Activos -> Local de archivo SVG.

    Cómo utilizar una imagen SVG en el ImageView

    A continuación, utilice normalmente como otros dibujables:

    android:src="@drawable/btn_image"
    • En el caso de utilizar el Apoyo de la Biblioteca, añadir app:srcCompat="@drawable/btn_image"
    • Compatibilidad avanzada con SVG características parece ser bastante débil, aunque.
    • Es una buena idea, pero no responde a la pregunta. Android vector de la imagen de formato es terrible para todos, pero la más sencilla de las imágenes. SVGs común de herramientas de diseño gráfico no convertir el bien y en el Estudio y/Android ni siquiera hacer un muy buen trabajo de respetar la imagen del tamaño.
    • Estás en lo correcto que se debe usar XML dibujables donde se puede, pero si son de forma remota la descarga de las imágenes SVG sobre la marcha, esto es lo que la biblioteca sería beneficioso para. Porque el uso de webviews chupa
  2. 2

    De los nuevos dispositivos que tienen la representación de hardware activada por defecto, es necesario explícitamente su vez en representación de software.

    imgView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);

    O agregar esta etiqueta en xml

    android:layerType="software"
  3. 2

    Para utilizar correctamente el svgimageview:svg atributo, la aplicación necesita saber es la definición. Desafortunadamente, sólo hay un FRASCO versión de la biblioteca en el momento, y (a diferencia de Aar) la necesaria definición no se combinan adecuadamente cuando la aplicación está construida.

    Tratar de copiar el attrs.xml archivo de la biblioteca de fuente

    https://github.com/BigBadaboom/androidsvg/blob/master/androidsvg/src/main/res/values/attrs.xml

    en su res/values carpeta.

    Creo que debería solucionar el problema.

  4. 0

    Localizar donde su imagen svg es.Botón derecho del ratón en dibujable carpeta res,
    elija nuevo>>>>Vector de Activos>>>Locales SVG>>>> y guardar como xml

  5. -2

    ImageView sólo acepta mapas de bits o VectorDrawables, que no acepta el formato svg. Una solución fácil es agregar un webview y se carga el archivo svg. En una situación en la que estaba recibiendo los datos de los archivos png o svg . En el diseño que he añadido un webview con visibilidad ido y si los datos recibidos desde el servidor fue svg lo cargan en webview .

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea