2012-02-20 7 views
9

एंड्रॉइड एपीआई स्तर 15 के बाद से methodpublic Drawable getDrawableForDensity (int id, int density) एक विशिष्ट स्क्रीन घनत्व के लिए एक ड्रॉबल ऑब्जेक्ट पुनर्प्राप्त करने के लिए है। क्या एपीआई लेवल 15 से पहले ऐसा करने का कोई तरीका है?एपीआई स्तर के लिए घनत्व के लिए आकर्षित करें <15

+3

घने होने की कोशिश नहीं कर रहे हैं, लेकिन आप ड्रॉबल को अपने नंगे नाम (संसाधन आईडी) से क्यों नहीं ला सकते हैं और ओएस को सही तरीके से समझने दें? – Sparky

+1

यह मेरे एक्सएमएल लेआउट के लिए ठीक काम करता है, लेकिन जब मैं बिटमैपफैक्टरी.decodeResource (संसाधन res, int id) के माध्यम से बिटमैप लोड करता हूं तो यह बिटमैप को एक छोटे रिज़ॉल्यूशन के साथ दिखाता है। हो सकता है कि बिटमैप फैक्ट्री के कुछ स्केलिंग के साथ ऐसा करना है, इसलिए मैं यह सुनिश्चित करना चाहता था कि यह उचित संसाधन लोड कर रहा है। वैसे भी, जब कैनवास पर चित्रण होता है तो यह बिटमैप के अन्य संकल्पों तक पहुंच के लिए उपयोगी हो सकता है, बिना एपीके में इसे कई बार शामिल किए बिना। –

+0

यह सच है, लेकिन फिर यदि आप आलसी होना चाहते हैं, तो आप इसे केवल एक बार शामिल कर सकते हैं और ओएस को पता लगाने की अनुमति नहीं है कि कोई अन्य प्रतियां नहीं हैं। आप शायद फोटो के लिए केवल एमडीपीआई या एचडीपीआई से दूर हो सकते हैं; लाइन कला इतनी अच्छी नहीं लगती है। – Sparky

उत्तर

2

तो मैंने वास्तव में सोचा कि इसे एंड्रॉइड एपीआई के रिवर्स-इंजीनियरिंग और @ एडटेनेंट के सुझाव के अनुसार स्रोत-कोड का उपयोग करके हल किया जा सकता है। मैंने इसे हल करना शुरू कर दिया, लेकिन इस प्रक्रिया में एक अंतर्निहित देशी (गैर-जावा) एपीआई के रूप में एक मृत अंत मारा गया जो आवश्यक है एंड्रॉइड के बाद के संस्करणों में अनुपलब्ध है।

यदि आप अपनी टिप्पणी के अनुसार बस बिटमैप्स को बाध्य कर रहे हैं, तो सुझाव दिया गया है कि बिटमैप फैक्ट्री के साथ ऐसा करना संभव है।

decodeResource(Resources res, int id, BitmapFactory.Options opts)

इस विधि अतिरिक्त BitmapFactory.Options जो आप लोड करने के लिए घनत्व निर्दिष्ट करने के लिए अनुमति देगा स्वीकार करता है: BitmapFactory एक और तरीका है। यह विशेष रूप से एपीआई 1. स्तर से ही अस्तित्व में है प्रकट होता है, मुझे विश्वास है कि आप का उपयोग कर सकते हैं:

BitmapFactory.Options options = new BitmapFactory.Options(); 
options.inDensity = DisplayMetrics.DENSITY_MEDIUM; // whichever you want to load 
options.inTargetDensity = getResources().getDisplayMetrics().densityDpi; 
options.inScaled = true; 

यह भी स्क्रीन घनत्व को यह स्केल करेगा अगर एक बेमेल घनत्व भरी हुई है।

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