嗨旋转有问题。我目前在画布上绘制几个对象。目前这个“对象”只是位图。在计算旋转并将其传递给Matrix后,我不得不创建一个新的位图来旋转它。一个小片段将clearify这样的:旋转'可以在画布上绘制的东西'
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个位图'对象'我想旋转。这意味着我必须保留十个Bitmaps作为“示例”,并在每个绘制周期中创建十个新的位图以及一个额外的新矩阵(没有找到“重置”它的方法)。这听起来很奇怪。有没有另外一种方法,可以在飞行中创建'可以在画布上绘制的东西'(无XML),同时保持旋转的控制。任何想法都非常受欢迎。如果它的View,Drawable或其他CustomClass无关紧要。也许重要的是getRotation
对于每一个应该绘制的“东西”都是一样的。最佳做法是什么?
这不会让我的位图的位置。他们跑“出来的画面”,如果我改变了getRotation'的'结果...让我们假设:我在(0,0)处绘制位图,然后将画布旋转-90度:我的位图将被推出屏幕 – 2012-04-30 08:35:42
这是因为旋转的锚点是左上角的点(0,0 )。如果您想要在图像的中心锚定一个旋转,您必须发布翻译画布以模拟作为锚点的中心。不幸的是,我在几何学上很糟糕,所以我不确定你需要应用的算法,但这是你需要做的。 – 2012-04-30 08:38:58