So verwenden Sie ein SVG-Bild in ImageView

Lesezeit: 7 Minuten

Benutzer-Avatar
WLeonows

Guten Tag, ich habe eine SVG Bild. Wie kann ich es hinzufügen ImageView Hintergrund ?

Ich habe versucht zu verwenden diese Bibliothek Aber ich habe ein Problem:

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)

Was ich getan habe ?

Erstens fügte ich hinzu dependency zu gradle:

compile 'com.caverock:androidsvg:1.2.1'

Zweitens habe ich mich verändert ImageView zu 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"
         />

Danach habe ich hinzugefügt xmls:svgimageview zum Root-Layout:

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

Dies clock.svg ist in dem assets Mappe.

Im neuen Android Studio besteht die Möglichkeit, SVG in eine XML-Datei zu importieren, sodass Sie keine externe Bibliothek verwenden müssen.

Klicken Sie in Drawable mit der rechten Maustaste -> Neu -> Vektorobjekt -> Lokale SVG-Datei.

Geben Sie hier die Bildbeschreibung ein

Dann verwenden Sie es normalerweise wie andere drawables:

android:src="https://stackoverflow.com/questions/34990236/@drawable/btn_image"

  • Wenn Sie die Support-Bibliothek verwenden, fügen Sie hinzu app:srcCompat="@drawable/btn_image"

    – lomza

    20. Oktober 2016 um 9:15 Uhr

  • Die Unterstützung für erweiterte SVG-Funktionen scheint jedoch ziemlich schwach zu sein.

    – Mark McKenna

    19. Mai 2017 um 14:46 Uhr

  • Es ist eine nette Idee, aber beantwortet nicht die Frage. Das zeichenbare Vektorformat von Android ist abscheulich für alle außer den einfachsten Bildern. SVGs aus gängigen Grafikdesign-Tools lassen sich nicht gut konvertieren und Studio/Android respektiert die Bildgröße nicht einmal sehr gut.

    – spaaarky21

    7. Februar 2018 um 17:26 Uhr

  • Sie haben Recht, Sie sollten XML Drawables verwenden, wo immer Sie können, aber wenn Sie SVG-Bilder im laufenden Betrieb aus der Ferne herunterladen, wäre die Bibliothek dafür von Vorteil. Weil die Verwendung von Webviews scheiße ist

    – Tschad

    24. Mai 2019 um 16:48 Uhr

  • Dies muss zur Kompilierzeit erfolgen. Was ist, wenn ich ein SVG-Bild habe, das ich zur Laufzeit von einem Server herunterlade?

    – Donald Duck

    10. August 2021 um 10:26 Uhr

Auf neueren Geräten, auf denen das Hardware-Rendering standardmäßig aktiviert ist, müssen Sie das Software-Rendering explizit aktivieren.

imgView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);

ODER fügen Sie dieses Tag in Ihre XML-Datei ein

android:layerType="software"

Um die richtig zu verwenden svgimageview:svg -Attribut muss die App ihre Definition kennen. Leider gibt es derzeit nur eine JAR-Version der Bibliothek, und (anders als bei AARs) wird die benötigte Definition nicht richtig zusammengeführt, wenn die App erstellt wird.

Versuchen Sie, die zu kopieren attrs.xml Datei aus der Bibliotheksquelle

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

in dein res/values Mappe.

Ich glaube das sollte dein Problem beheben.

Obwohl SVG ein XML-basiertes Vektorbild ist, kann Imageview nur XML (Vector Drawables) rendern. Daher müssen wir SVG in das XML-Format konvertieren. Wir können dies mit Android Vector Asset Studio tun.

Dies kann hilfreich sein, um SVG, PSD in XML zu konvertieren
https://medium.com/@iamitgupta1994/converting-svg-psd-to-xml-vector-drawable-using-android-vector-asset-studio-8e8ec23d5405

Benutzer-Avatar
Kamrujjaman Freude

Klicken Sie mit der rechten Maustaste auf Drawable -> Neu -> Vektor-Asset -> wählen Sie Lokale Datei (SVG, PSD) und wählen Sie den Pfad, in dem sich Ihr Bild befindet

Beispiel /Benutzer/IhrPC-Name/Desktop/taka.svg

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Es kann als XML-Datei gespeichert werden. Dann können Sie es in Ihre Bildansicht verwenden.

Benutzer-Avatar
Marg

Suchen Sie, wo sich Ihr SVG-Bild befindet. Klicken Sie mit der rechten Maustaste auf den zeichenbaren Ordner auf res, wählen Sie Neu>>>>Vektorobjekt>>>Lokales SVG>>>> und speichern Sie es als XML

1229020cookie-checkSo verwenden Sie ein SVG-Bild in ImageView

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy