2016-01-25 9 views
17

गुड डे में एसवीजी छवि का उपयोग कैसे करें, मेरे पास SVG छवि है। मैं इसे ImageView पृष्ठभूमि में कैसे जोड़ सकता हूं?ImageView

मैं 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) 

मैं क्या किया था?

सबसे पहले, मैं gradle को dependency कहा:

compile 'com.caverock:androidsvg:1.2.1' 

दूसरे, मैं 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 बदल कि मैं 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 फ़ोल्डर में है।

+1

"लेकिन मुझे समस्या है" - स्टैक ओवरफ़्लो पर प्रश्न पूछते समय, कृपया संपूर्ण स्टैक ट्रेस प्रदान करें। – CommonsWare

+0

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

उत्तर

45

नए Android स्टूडियो में इस टैग को जोड़ने वहाँ एक्सएमएल फ़ाइल को एसवीजी आयात करने के लिए संभावना है, इसलिए आप बाहरी पुस्तकालय का उपयोग करने की जरूरत नहीं है।

खींचने योग्य दाएं क्लिक -> नया -> वेक्टर संपत्ति -> स्थानीय एसवीजी फ़ाइल।

enter image description here

तो आप इसे सामान्य रूप से अन्य ड्रॉएबल के रूप में उपयोग:

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

समर्थन लाइब्रेरी का उपयोग करने के मामले में, 'ऐप: srcCompat = "@ drawable/btn_image" ' – lomza

+2

उन्नत एसवीजी के लिए समर्थन जोड़ें हालांकि, विशेषताएं बहुत कमजोर लगती हैं। –

+0

यह एक अच्छा विचार है लेकिन सवाल का जवाब नहीं देता है। एंड्रॉइड के वेक्टर ड्रॉएबल प्रारूप सभी के लिए सबसे सरल छवियों के लिए * भयानक * है। सामान्य ग्राफिक डिज़ाइन टूल से एसवीजी अच्छी तरह से परिवर्तित नहीं होते हैं और स्टूडियो/एंड्रॉइड छवि के आकार का सम्मान करने का भी बहुत अच्छा काम नहीं करता है। – spaaarky21

1

डिफ़ॉल्ट रूप से हार्डवेयर प्रतिपादन वाले नए उपकरणों पर, आपको सॉफ़्टवेयर प्रतिपादन को स्पष्ट रूप से चालू करने की आवश्यकता है।

imgView.setLayerType(View.LAYER_TYPE_SOFTWARE, null); 

या अपने xml

android:layerType="software" 
1

ठीक से svgimageview:svg विशेषता का उपयोग करने के लिए, एप्लिकेशन यह परिभाषा है पता करने के लिए की जरूरत है। दुर्भाग्यवश, फिलहाल लाइब्रेरी का केवल एक जार संस्करण है, और (एएआर के विपरीत) ऐप बनने पर आवश्यक परिभाषा ठीक से विलय नहीं हो पाती है।

अपने res/values फ़ोल्डर में पुस्तकालय स्रोत

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

से attrs.xml फ़ाइल कॉपी करने की कोशिश करो।

मुझे विश्वास है कि आपकी समस्या को ठीक करना चाहिए।