2012-12-07 7 views
48

हाय मैं एंड्रॉयड Drawable वर्ग से दो तरीकों से उलझन में हूँएंड्रॉइड getIntrinsicHeight क्या मिलता है और getIntrinsicWidth मतलब है?

getIntrinsicHeight() 
getIntrinsicWidth() 

एपीआई परिभाषा का कहना है http://developer.android.com/reference/android/graphics/drawable/Drawable.html#getIntrinsicHeight()

शब्द आंतरिक ऊंचाई/चौड़ाई क्या मतलब है? मेरा मतलब है कि यह वास्तविक छवि की चौड़ाई है?

+2

सही उत्तर यहां http://stackoverflow.com/questions/6536418/android-why-are-the-width-height-of-the-drawable-in-imageview-wrong – mathheadinclouds

उत्तर

102

आप आंतरिक का अर्थ जानना चाहते हैं, यह लेकिन वास्तविक संपत्ति एक वस्तु के पास कुछ नहीं है। हमारे मामले में getIntrinsicWidth/Height बस आपको उस ड्रॉइंग की डिफ़ॉल्ट चौड़ाई/ऊंचाई प्रदान करने का मतलब है।

यह किसी भी संशोधन के बिना संसाधन फ़ोल्डर में आपके द्वारा डाले जाने योग्य ड्रॉबल का सटीक आकार देता है।

अब आप को पता है कि getWidth या getHeight एक मूल्य के जो चौड़ाई और ऊंचाई आप अपनी XML लेआउट में अपनी ImageView के लिए निर्दिष्ट करने के लिए अनुसार भिन्न हो सकता वापस आ जाएगी है।

मान लीजिए कि आप एक्सएमएल लेआउट में 100*100 के रूप में चौड़ाई और अपने ImageView की ऊंचाई प्रदान की है और drawable आप पृष्ठभूमि के रूप में इस्तेमाल किया आकार 200 * 200 का है करते हैं।

अब getIntrinsicWidth लौटना चाहिए 200 जबकि getWidth लौटना चाहिए 100

+0

धन्यवाद मैं देखता हूं। लेकिन वर्तमान में मैं url से एक छवि डाउनलोएडिंग कर रहा हूं (और इसे छवि दृश्य में लोड करता हूं) आंतरिक ऊंचाई और चौड़ाई मूल छवि के समान नहीं है यदि मैं इसे ब्राउज़र में एक्सेस करता हूं, तो यह रिपोर्ट की जा रही चीज़ों से बड़ा है, लेकिन ऊपर में उदाहरण के लिए, आप कह रहे हैं कि वे एक ही – user1697965

+0

हो सकते हैं, शायद आप डाउनलोड करते समय छवि को स्केल कर रहे हैं। मुझे यकीन नहीं है कि यह डाउनलोड की गई छवि के लिए कितना काम करता है लेकिन कम से कम यह उन चित्रों के लिए काम करता है जो मेरे ड्रॉइंग में हैं। –

+6

गलत। सही उत्तर यहां http://stackoverflow.com/questions/6536418/android-why-are-the-width-height-of-the-drawable-in-imageview-wrong – mathheadinclouds

4

एंड्रॉयड एक drawable इस तरह के रंग, बिटमैप के रूप में कई प्रकार के हो सकते हैं, आदि को आकार

इन ड्रॉएबल से कुछ एक आंतरिक ऊंचाई ऐसी है एक बिटमैप ड्रावेबल के रूप में जो छवि का आयाम है।

रंगीन (जैसे ठोस रंगों को आकर्षित करने के लिए उपयोग किया जाता है) जैसे ड्रॉबल्स की आंतरिक ऊंचाई नहीं होती है। इस मामले में getIntrinsicHeight/Width रिटर्न -1 का मान।

यहां तक ​​कि अगर एक drawable आंतरिक ऊंचाई/चौड़ाई नहीं है, हर drawable जरूरतों उनकी सीमा सेट इससे पहले कि वे खुद को प्रस्तुत कर सकते हैं

(यानी इससे पहले कि आप mydrawable.draw (कैनवास) कहते हैं) आप एक का उपयोग कर के लिए एक दृश्य के लिए पृष्ठभूमि के रूप में आकर्षित करने योग्य, दृश्य आंतरिक रूप से आपके लिए सीमा निर्धारित करता है। लेकिन यदि आप अपने स्वयं के ड्रॉ में ड्रॉबल्स का उपयोग कर रहे हैं, तो आपको सेटबाउंड के माध्यम से सीमाओं को स्पष्ट रूप से सेट करने की आवश्यकता है।

8

संबंधित प्रश्न here on stackoverflow

अगर आपकी चित्र इंटरनेट से डाउनलोड किया जाता है, .getIntrinsicWidth() और .getIntrinsicHeight() वास्तव में आप "असली" चौड़ाई और ऊंचाई, छवि के क्रमशः दे।

इसे आंतरिक कहा जाता है, क्योंकि यह केवल छवि पर और कुछ भी नहीं (जैसे आपका फोन) पर निर्भर करता है।

हां, जो भी आपको मिलता है वह सभी परिस्थितियों में आंतरिक नहीं है - दुर्भाग्यवश, छवि के अलावा अन्य चीजों पर निर्भर करता है।

यहां वह जगह है जहां आपको गलत (अर्थात्, गैर-आंतरिक) परिणाम मिलता है।मान लीजिए कि आप डिफ़ॉल्ट लांचर आइकन का उपयोग कर रहे हैं, तो

Log.i("", "ic_launcher intrinsic width " + getResources().getDrawable(R.drawable.ic_launcher).getIntrinsicWidth()); 

आप लॉन्चर आइकन की चौड़ाई (पिक्सेल में) बता देंगे करते हैं। लेकिन किसके बारे में? - आपके पास उनमें से कई हैं, एक ड्रॉबल-एक्सएचडीपीआई फ़ोल्डर में, एक ड्रॉबल-एचडीपीआई फ़ोल्डर, आदि में। ठीक है, अगर आपका डिवाइस है, तो कहें, xhdpi, यह आपको 96 देता है, जो वास्तव में संस्करण की पिक्सेल-चौड़ाई है drawable-xhdpi फ़ोल्डर में रहने वाले लॉन्चर आइकन। अब, drawable-xhdpi फ़ोल्डर में आइकन हटाएं, और फिर से चलाएं (अभी भी एक xhdpi डिवाइस (असली या नकली) का उपयोग कर)। उपयोग की जाने वाली छवि ड्रॉबल-एचडीपीआई फ़ोल्डर से होगी, क्योंकि यह xhdpi संस्करण के लिए "निकटतम" है। उस आइकन में 72 की पिक्सेल चौड़ाई है। लेकिन ऊपर कोड आपको 96 देगा!

यह स्पष्ट रूप से "अंतर्निहित" (शब्द की उचित समझ में नहीं) है, क्योंकि यह केवल उपयोग की गई छवि पर निर्भर नहीं है।

तो यदि आप मेरे जैसे आलसी हैं, और इसलिए प्रत्येक संसाधन आइकन/छवि के 4 संस्करण उत्पन्न नहीं कर रहे हैं (लेकिन इसके बजाय केवल 1 या 2 का उपयोग करके, और उन्हें हाथ से स्केल कर रहे हैं), तो आपको उल्लिखित एंड्रॉइडल से सावधान रहना होगा मिथ्या नाम।

संबंधित मुद्दे