vectores studio imagenes compat agregar android svg androidsvg

studio - vector drawable compat android



Cómo usar la imagen SVG en ImageView (4)

En el nuevo Android Studio existe la posibilidad de importar archivos SVG a XML, por lo que no es necesario utilizar una biblioteca externa.

Haga clic con el botón derecho del ratón sobre -> Nuevo -> Vector Asset -> Archivo SVG local.

Luego lo usas normalmente como otros dibujables:

android:src="@drawable/btn_image"

Buen día, tengo una imagen SVG . ¿Cómo puedo agregarlo al fondo de ImageView ?

Intenté 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, agregué dependency a gradle :

compile ''com.caverock:androidsvg:1.2.1''

En segundo lugar, cambié 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 eso agregué xmls:svgimageview al diseño raíz:

<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 está en la carpeta de assets .


En los dispositivos más nuevos que tienen la representación de hardware activada de forma predeterminada, debe activar explícitamente la representación del software.

imgView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);

O agrega esta etiqueta en tu xml

android:layerType="software"


ImageView solo acepta Bitmaps o VectorDrawables, no puede aceptar svg. Una solución fácil es agregar una vista web y cargará el archivo svg. En una situación estaba recibiendo pngs o svg de datos. En el diseño, he agregado una vista web con visibilidad desaparecida y si los datos recibidos del servidor eran svg, los cargué en la vista web.


Para utilizar correctamente el svgimageview:svg , la aplicación necesita saber su definición. Desafortunadamente, solo hay una versión JAR de la biblioteca en este momento y (a diferencia de los AAR) la definición necesaria no se fusiona correctamente cuando se crea la aplicación.

Intente copiar el archivo attrs.xml desde la fuente de la biblioteca

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

en su carpeta res/values .

Creo que eso debería solucionar tu problema.