संबंधित प्रश्न 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 का उपयोग करके, और उन्हें हाथ से स्केल कर रहे हैं), तो आपको उल्लिखित एंड्रॉइडल से सावधान रहना होगा मिथ्या नाम।
सही उत्तर यहां http://stackoverflow.com/questions/6536418/android-why-are-the-width-height-of-the-drawable-in-imageview-wrong – mathheadinclouds