こんにちは、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)
私がしたことは何ですか?
最初に、dependency
にgradle
を追加しました:
compile 'com.caverock:androidsvg:1.2.1'
次に、ImageView
を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"
/>
その後、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.svg
はassets
フォルダーにあります。
svgimageview:svg
属性を適切に使用するには、アプリがその定義を知っている必要があります。残念ながら、現時点ではライブラリのJARバージョンのみがあり、(AARとは異なり)アプリのビルド時に必要な定義が適切にマージされません。
ライブラリソースからattrs.xml
ファイルをコピーしてみてください
https://github.com/BigBadaboom/androidsvg/blob/master/androidsvg/src/main/res/values/attrs.xml
res/values
フォルダーに。
これで問題が解決するはずです。
デフォルトでハードウェアレンダリングがオンになっている新しいデバイスでは、ソフトウェアレンダリングを明示的にオンにする必要があります。
imgView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
[〜#〜] or [〜#〜] xmlにこのタグを追加します
Android:layerType="software"
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
あなたのsvg画像がどこにあるかを見つけてください。resでdrawableフォルダを右クリックし、new >>>> Vector Asset >>> Local SVG >>>>を選択してxmlとして保存してください。