2016-01-25 17 views
17

おはよう、私はSVGイメージを持っています。私はそれをバックグラウンドImageViewにどのように追加できますか?ImageViewでのSVG画像の使用方法

私はthis libraryを使用しようとしたしかし、私は問題があります:私は何

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) 

を?

まず、Iはgradledependencyを追加:

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

compile 'com.caverock:androidsvg:1.2.1' 

は第二に、私は、ルートレイアウトにxmls:svgimageviewを追加した後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" 
     /> 

ImageViewを変更しました

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

+1

「問題があります」 - スタックオーバーフローに関する質問をするときは、スタックトレース全体を提供してください。 – CommonsWare

+0

https://developer.android.com/studio/write/vector-asset-studio.html#svg –

答えて

45

にこのタグを追加するので、あなたは外部ライブラリを使用する必要はありません。

ドロアブルの右クリックメニュー - >新規 - >ベクターアセット - >ローカルSVGファイル。

enter image description here

は、次にあなたは他のドロウアブルとして、通常はそれを使用する:

android:src="@drawable/btn_image" 
+2

サポートライブラリを使用する場合は、「app:srcCompat = "@ drawable/btn_image"」を追加してください。 – lomza

+2

高度なSVGをサポートしていますしかし、機能はかなり弱いようです。 –

+0

いいアイデアですが、その質問には答えません。 Androidのベクトル描画可能な形式は、最もシンプルな画像を除くすべてのもので*ひどい*です。一般的なグラフィックデザインツールのSVGは変換に問題があり、Studio/Androidはイメージのサイズを尊重することさえしません。 – spaaarky21

1

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

imgView.setLayerType(View.LAYER_TYPE_SOFTWARE, null); 

ORは、XMLファイルにSVGをインポートする可能性がある新しいAndroid Studioで、あなたのxml

android:layerType="software" 
1

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

あなたres/valuesフォルダにライブラリのソース

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

からattrs.xmlファイルをコピーしてください。

私はあなたの問題を解決する必要がありますと信じています。

関連する問題