我正在尝试在屏幕上绘制精灵表动画,这在我使用此代码之前工作正常。
canvas.drawColor(Color.TRANSPARENT);
Rect src = new Rect(CurrentSprite.x * SheetSize.x, CurrentSprite.y * SheetSize.y, (CurrentSprite.x * SheetSize.x) + SheetSize.x, (CurrentSprite.y * SheetSize.y) + SheetSize.y);
Rect dst = new Rect(X, Y, X + SheetSize.x, Y + SheetSize.y);
canvas.drawBitmap(bmp, src, dst, null);
但是我现在需要在我在屏幕上绘制之前旋转图像。所以我改变了代码,所以我正在制作精灵的本地副本。我要画这个但是在这里我遇到了问题。我正在使用Bitmap.createBitmap方法,但似乎这个方法什么也没做,因为当我看到屏幕时,屏幕上会绘制完整的精灵表,有时我会得到OutOfMemoryException(可以理解,因为完整的图像非常大)。
canvas.drawColor(Color.TRANSPARENT);
Matrix matrix = new Matrix();
matrix.postRotate(Degrees);
Bitmap tempAnimationBmp = Bitmap.createBitmap(bmp, CurrentSprite.x * SheetSize.x, CurrentSprite.y * SheetSize.y, (CurrentSprite.x * SheetSize.x) + SheetSize.x, (CurrentSprite.y * SheetSize.y) + SheetSize.y, matrix, true);
canvas.drawBitmap(tempAnimationBmp, X, Y, null);
tempAnimationBmp.recycle();
为什么我会获得完整的精灵表?
答案 0 :(得分:0)
我建议使用其中一个DrawableContainer而不是尝试创建一堆位图。 Drawables非常容易使用 - 您只需设置尺寸,将其传递给画布,它就会将自己绘制到该位置的画布上。 Drawables的优点在于它们也非常容易制作,因此您可以创建一个自定义的SpriteDrawable类,该类从系统中获取资源并仅将其区域绘制到画布上。
通过处理此流程而不是尝试创建一堆位图,您将节省大量内存,并且当您尝试使用Android的图形系统时,可能会遇到很多麻烦。