如何在android中的中心x y周围的画布上旋转位图

时间:2014-01-19 03:03:22

标签: android android-layout canvas bitmap

我在画布上绘制了许多形状。一个这样的形状是位图。假设画布上位图的中心位于中心xCenter, yCenter,以便绘制我调用

xLeft = xCenter+mBitmap.getWidth()/2;
yTop = yCenter+mBitmap.getHeight()/2;
canvas.drawBitmap(mBitmap, x,y, mFilledPaint);

到目前为止一切正常。下一步是围绕中心xCenter, yCenter旋转位图。我的代码不是这样做的。它将位图移动到整个地方,而我想要的只是让图像围绕自己的中心旋转。我该如何修复下面的代码?我已经查看了Android: How to rotate a bitmap on a center point,我最多也不了解那里的回复。

我的代码

xLeft = xCenter+mBitmap.getWidth()/2;
yTop = yCenter+mBitmap.getHeight()/2;
matrix.postRotate(30f, xLeft, yTop);
canvas.drawBitmap(mBitmap, matrix, mFilledPaint);

也用0替换xLeft和yTop似乎不起作用..任何想法??

修改

xCenter, yCenter不是画布的中心。这只是位图中心落地的地方。

1 个答案:

答案 0 :(得分:1)

我想你的意思是,你无法理解以下代码:

this.matrix.reset();
this.matrix.setTranslate(this.floatXpos, this.floatYpos);
this.matrix.postRotate((float)this.direction, this.getCenterX(), this.getCenterY()); 

我想我可以给出一些解释,因为我之前在我的项目中完成了这项任务:

  1. 将第一行放在身份上,这意味着做事,因为任何时候身份矩阵都会自行完成。
  2. 第二行,将原始点移动到目标位置,这实际上是指定位图将在画布中绘制的xLeft和yTop。
  3. 第三条线,围绕中心点旋转(xLeft + bitmapWidth / 2,yTop + Height / 2)
  4. 要理解这一点,你需要知道如何使用矩阵。基本上,你的位图(位图中的点实际上是一个矩阵)乘以你在这里创建的矩阵,然后它得到一个新的矩阵,画布只是绘制新的基质