我有问题。我有一个绘制后侦听器,在其中绘制位图的缩放版本。问题源于这样一个事实,即我倾向于在每次缩放时进行一些缩放(放大放大,缩小缩小)。问题是我无法回收位图,因为当我在绘制后尝试这样做时
canvas.draw(scaledbitmap,0,0,null);
scaledBitmap.recycle()
我得到 Canvas 无法绘制回收的位图异常
有谁知道我在完成后如何回收位图,以便之后可以缩放另一个位图,并且我不会遇到 OutOfMemoryException 崩溃。
一些代码可以准确地向您展示我是如何使用它的:
private SpenDrawListener mPosteDrawListener = new SpenDrawListener() {
@Override
public void onDraw(Canvas canvas, float x, float y, float ratio,
float frameStartX, float frameStartY, RectF updateRect) {
if(mLineDrawingBitmap == null)
mLineDrawingBitmap = loadLineDrawingBitmap(mLineDrawingFileName);
Bitmap bm = Bitmap.createScaledBitmap(mLineDrawingBitmap, (int)(mLineDrawingBitmap.getWidth() * ratio), (int)(mLineDrawingBitmap.getHeight() * ratio), true);
/*
float pointX = (mScreenRect.width() - bm.getWidth()) / 2;
float pointY = mScreenRect.height() / 2 - bm.getHeight();
*/
float pointX = frameStartX - (x * ratio);
float pointY = frameStartY - (y * ratio);
//canvas.drawBitmap(bm, 0, 0,null);
canvas.drawBitmap(bm, pointX, pointY, null);
//bm.recycle();
}
};