web-dev-qa-db-ja.com

ImageViewでSVG画像を使用する方法

こんにちは、SVGイメージがあります。 ImageView backgroundに追加するにはどうすればよいですか?

このライブラリ を使用しようとしましたが、問題があります:

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)

私がしたことは何ですか?

最初に、dependencygradleを追加しました:

compile 'com.caverock:androidsvg:1.2.1'

次に、ImageViewcom.caverock.androidsvg.SVGImageViewに変更しました

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

その後、xmls:svgimageviewをルートレイアウトに追加しました。

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

このclock.svgassetsフォルダーにあります。

35
VLeonovs

新しいAndroid Studioでは、SVGをXMLファイルにインポートする可能性があるため、外部ライブラリを使用する必要はありません。

描画可能な右クリック->新規->ベクターアセット->ローカルSVGファイル。

enter image description here

その後、通常は他のドロアブルとして使用します:

Android:src="@drawable/btn_image"
87

svgimageview:svg属性を適切に使用するには、アプリがその定義を知っている必要があります。残念ながら、現時点ではライブラリのJARバージョンのみがあり、(AARとは異なり)アプリのビルド時に必要な定義が適切にマージされません。

ライブラリソースからattrs.xmlファイルをコピーしてみてください

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

res/valuesフォルダーに。

これで問題が解決するはずです。

2
Paul LeBeau

デフォルトでハードウェアレンダリングがオンになっている新しいデバイスでは、ソフトウェアレンダリングを明示的にオンにする必要があります。

imgView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);

[〜#〜] or [〜#〜] xmlにこのタグを追加します

Android:layerType="software"
2
Ahsan Kamal

SVGはXMLベースのベクター画像ですが、ImageviewはXML(Vector Drawables)のみをレンダリングできます。したがって、SVGをXML形式に変換する必要があります。 Android Vector Asset Studio。

これは、SVG、PSDからXMLへの変換に役立つ場合があります
https://medium.com/@iamitgupta1994/converting-svg-psd-to-xml-vector-drawable-using-Android-vector-asset-studio-8e8ec23d5405

1
Amit Gupta

あなたのsvg画像がどこにあるかを見つけてください。resでdrawableフォルダを右クリックし、new >>>> Vector Asset >>> Local SVG >>>>を選択してxmlとして保存してください。

0
Marg