就在今天我面臨同樣的問題。 ScaleDrawable似乎不起作用。經過一番調查,我找到了解決辦法:
如果你看看documentation,你可以找到這樣一句話:「一個Drawable,根據它的當前級別值改變另一個Drawable的大小。」而已。
我發現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);
更新:我覺得這個問題在draw()函數。因爲初始化後級變量0:
public void draw(Canvas canvas) {
if (mScaleState.mDrawable.getLevel() != 0)
mScaleState.mDrawable.draw(canvas);
}
更新:也許那麼這段代碼可以幫助你:
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期待。我認爲有一個位圖(PNG/JPG/...),然後我可以在xml中向上/向下縮放此位圖,然後在差異佈局中使用它,而不是使用具有不同大小的多個位圖。任何建議,你可以在android中做到這一點? – stephenteh 2011-04-04 09:12:59
@stephenteh至於我,我想從ScaleDrawable的縮略圖圖像。我爲你找到了一個有趣的解決方案。只是從源代碼中使用createScaledBitmap(我在整個答案中添加了示例代碼,這裏不適合)。您可以將0.7值更改爲整數資源(例如R.integer.myvalue)。 而且我發現了兩個有趣的功能:View類中的setScaleX(..)和setScaleY(..)。但他們來自11 API。 – m039 2011-04-04 19:20:59
謝謝你,你是個紳士和學者。我們是否應該將此報告爲一個錯誤?看起來很不直觀,默認情況下會使Drawable *不可見*。 – phreakhead 2013-02-14 22:45:46