【发布时间】:2012-04-27 15:55:23
【问题描述】:
您好,关于旋转有问题。我目前正在画布上绘制一些对象。目前这个“对象”只是位图。在计算旋转并将其传递到 Matrix 中后,我不得不创建一个新的位图以使其旋转。一个小的 sn-p 将澄清这一点:
public void onDraw(Canvas canvas){
mMatrix = new Matrix();
mMatrix.postRotate(getRotation());
Bitmap rotateBmp = Bitmap.createBitmap(mBitmap, 0, 0, mBitmap.getWidth(), mBitmap.getHeight(), mMatrix, true);
canvas.drawBitmap(rotateBmp, mCoords.x -(mBitmap.getWidth() / 2), mCoords.y - ( mBitmap.getHeight() / 2), null);
rotateBmp.recycle();
}
为了节省内存,我所能做的就是在rotateBmp 上调用回收,它会在大部分时间正确运行。假设我有 10 个要旋转的位图“对象”。这意味着我必须保留十个位图作为“样本”,并在每个绘制周期中创建十个新位图以及一个额外的新矩阵(没有找到“重置”它的方法)。这对我来说听起来很奇怪。有没有另一种方法,可以动态创建“可以在画布上绘制的东西”(没有 XML),同时保持对旋转的控制。任何想法都非常受欢迎。如果它是 View、Drawable 或另一个 CustomClass 无关紧要。也许重要的是getRotation 对于应该绘制的每个“东西”都是一样的。这样做的最佳做法是什么?
【问题讨论】:
标签: android matrix bitmap rotation drawable