सेट है यह मेरा सेटअप है। मेरे पास कुछ फैंसी हेडर के साथ एक कस्टम ListView
है, जो ViewPager
के अंदर है। मैं छवियों की स्मृति कैश को बनाए रख रहा हूं जिसे किसी भी आत्म-सम्मानित डेवलपर की तरह स्थानीय रूप से डाउनलोड और संग्रहीत किया जा रहा है।हर समय छवि से बचें और ऑनआउट करें ImageView बिटमैप
मुद्दा मैं आ रही है, कि हर मैं अपने ListView
के getView()
विधि में ImageView
पर setImageBitmap(Bitmap bm)
कहते कैश से एक बिटमैप का उपयोग कर, यह onMeasure()
करने के लिए अपने सभी दृश्य पैदा कर रहा है। मैं एंड्रॉयड ImageView
स्रोत कोड के माध्यम से देखा और यह मिल गया है:
public void setImageDrawable(Drawable drawable) {
if (mDrawable != drawable) {
mResource = 0;
mUri = null;
int oldWidth = mDrawableWidth;
int oldHeight = mDrawableHeight;
updateDrawable(drawable);
if (oldWidth != mDrawableWidth || oldHeight != mDrawableHeight) {
requestLayout();
}
invalidate();
}
}
तो मैं देख सकता हूँ कि setImageDrawable
(जो setImageBitmap
द्वारा कहा जाता है) drawable
अपने पिछले Drawable
से आयाम भिन्न है जब भी अपने लेआउट अनुरोध करता है। समस्या यह है कि मेरा ImageView
स्थिर है जो 60 डीपी x 60 डीपी तक स्थिर है, इसलिए इसका आकार उसकी छवि के आकार के बावजूद बदलने वाला नहीं है।
क्या मैं स्क्रॉल के रूप में लगातार लेआउट के आसपास ले जा सकता हूं? onMeasure
और onLayout
कॉल View
पेड़ को अपना रास्ता प्रसारित कर रहे हैं, इसलिए मेरा ListView
और ViewPager
भी सूची स्क्रॉलिंग के बीच में मापा जा रहा है, जो स्पष्ट रूप से गंभीर प्रदर्शन समस्याओं (~ 100ms UI कूदता है) का कारण बन रहा है।
प्रदर्शन भयानक है और मुझे इसे ठीक करने की आवश्यकता है। किसी के पास कोई समाधान है?
धन्यवाद।
दिमाग साझा करना आपने इसे कैसे ठीक किया? – Dbl