我正在开发一个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);
}
答案 0 :(得分:2)
由于您只缩放原始位图,因此可能需要使用以下方法
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(...)
几乎会一直被调用,而且一直重建相同的位图会很慢而浪费。
答案 1 :(得分:1)
Bitmap.setWidth
和Bitmap.setHeight
。
您没有将minSdkVersion
设置为19或更高版本吗?
更新
BitmapFactory.Options options = new BitmapFactory.Options();
options.inMutable = true;
ball= BitmapFactory.decodeResource(getResources(), R.drawable.start_bg, options);
答案 2 :(得分:0)
如果要将缩小版的位图资源加载到内存中,请将BitmapFactory.Options
方法正确设置为decodeResource
方法。 Load a Scaled Down Version into Memory如果您想缩放内存中已有的位图,请使用Bitmap#createScaledBitmap
。