बस आज मैं एक ही समस्या का सामना करना पड़ा। स्केलड्राउबल काम नहीं कर रहा है। कुछ जांच के बाद मुझे समाधान मिला:
यदि आप documentation पर देखते हैं तो आप यह वाक्यांश पा सकते हैं: "एक ड्रायबल जो अपने वर्तमान स्तर मान के आधार पर किसी अन्य ड्रायरेबल के आकार को बदलता है।" बस।
यह बाद मैंने पाया onBoundsChange() समारोह अजीब स्तर चर का उपयोग करता है स्पष्ट हो गया।
Resources res = getResources();
ScaleDrawable sd = (ScaleDrawable) res.getDrawable(R.drawable.logo2);
Drawable d = sd.getDrawable();
d.setLevel(1);
ImageView iv = new ImageView(this);
iv.setImageDrawable(sd);
iv.setAdjustViewBounds(true);
iv.setLayoutParams(new Gallery.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
setContentView(iv);
अद्यतन:
आप के लिए कोड कुछ इस तरह होगा मैं ड्रा() फ़ंक्शन में समस्या लगता है।
public void draw(Canvas canvas) {
if (mScaleState.mDrawable.getLevel() != 0)
mScaleState.mDrawable.draw(canvas);
}
अद्यतन:: क्योंकि एक आरंभीकरण के बाद के स्तर चर 0 है हो सकता है कि उसके बाद इस कोड को आपकी मदद कर सकता है: पैमाने drawable के बजाय
private void useScaledImage() {
Resources res = getResources();
BitmapDrawable bd = (BitmapDrawable)res.getDrawable(R.drawable.sun);
Bitmap b = Bitmap.createScaledBitmap(bd.getBitmap(),
(int) (bd.getIntrinsicHeight() * 0.7),
(int) (bd.getIntrinsicWidth() * 0.7),
false);
LinearLayout l = new LinearLayout(this);
ImageView iv = new ImageView(this);
iv.setImageDrawable(new BitmapDrawable(b));
iv.setLayoutParams(new Gallery.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
l.addView(iv);
setContentView(l);
}
आपके उत्तर के लिए धन्यवाद, लगता है कि मैं क्या ScaleDrawable से उम्मीद नहीं है। मैंने सोचा कि एक बिटमैप (पीएनजी/जेपीजी/...) और फिर मैं इस बिटमैप को एक्सएमएल में ऊपर/नीचे स्केल कर सकता हूं, फिर अंतर आकार के साथ एकाधिक बिटमैप रखने के बजाय इसे अंतर लेआउट में उपयोग कर सकता हूं। एंड्रॉइड में कोई सुझाव जो आप कर सकते हैं? – stephenteh
@stephenteh मेरे लिए, मुझे स्केलड्रावेबल से थंबनेल छवियों की तरह कुछ चाहिए। मुझे आपके लिए एक दिलचस्प समाधान मिला। स्रोत से createScaledBitmap का उपयोग करने के लिए (मैंने पूरे उत्तर में उदाहरण कोड जोड़ा। यहां यह फिट नहीं है।)। आप 0.7 मान को एक इंटीजर रिसोर्स (उदा। R.integer.myvalue) से बदल सकते हैं। और मुझे दो रोचक फ़ंक्शन मिल गए हैं: व्यू क्लासएक्स (..) और सेटस्केले (..) व्यू क्लास से। लेकिन वे 11 एपीआई से हैं। – m039
धन्यवाद, आप एक सज्जन और विद्वान हैं। क्या हमें इसे एक बग के रूप में रिपोर्ट करना चाहिए? डिफ़ॉल्ट रूप से एक Drawable * अदृश्य * बनाने के लिए unintuitive लगता है। – phreakhead