2014-12-07 165 views
0

我正在開發一個android項目。當我嘗試調整位圖的大小時,應用程序不幸停止,並在Logcat中給出消息「只有可變位圖可以調整大小」。我試圖將我的位圖轉換爲可變位,但仍然是同樣的問題。可能是解決方案。 我的代碼:調整位圖大小

public DrawingTheBall(Context context) { 
    super(context); 

    ball= BitmapFactory.decodeResource(getResources(),R.drawable.start_bg);; 

} 

@Override 
protected void onDraw(Canvas canvas) { 
    super.onDraw(canvas); 

    ball.setWidth(canvas.getWidth()); 
    ball.setHeight(canvas.getHeight()); 


    Paint p=new Paint(); 
    canvas.drawBitmap(ball,0,0,p); 


} 

回答

1

Bitmap.setWidthBitmap.setHeight是從API19(KitKat)引入的。

你沒有將minSdkVersion設置爲19或更高?

更新:

BitmapFactory.Options options = new BitmapFactory.Options(); 
options.inMutable = true; 
ball= BitmapFactory.decodeResource(getResources(), R.drawable.start_bg, options); 
+0

yes my minsdkvertion is 19 – 2014-12-07 16:41:30

+0

@ user3768819 ok,那麼您是否將'BitmapFactory.Options()。inMutable = true'作爲'BitmapFactory.decodeResource'方法的第三個參數? – hata 2014-12-07 16:58:07

2

既然你只縮放原始位圖,你可能想使用folllowing方法

Bitmap.createScaledBitmap(Bitmap src, int dstWidth, int dstHeight, boolean filter) 

完整代碼:

Bitmap newBmp = Bitmap.createScaledBitmap(ball, canvas.getWidth(), canvas.getHeight(), true); 
canvas.drawBitmap(newBmp, 0, 0, p); 

不妨將 「newBmp」 行到另一種方法如onSizeChanged(...)onDraw(...)會一直被調用,並且總是重新創建相同的位圖會很慢且浪費。

0

如果要加載位圖資源的縮小版本到內存中傳遞正確設置BitmapFactory.OptionsdecodeResource方法。 Load a Scaled Down Version into Memory如果要縮放內存中已有的位圖,請使用Bitmap#createScaledBitmap