【问题标题】:How do I rotate bitmap on canvas around center x y in android如何在 android 中围绕中心 x y 在画布上旋转位图
【发布时间】:2014-01-19 03:03:22
【问题描述】:

我正在画布上绘制许多形状。一种这样的形状是位图。假设画布上位图的中心位于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 不是画布的中心。它只是位图中心所在的点。

【问题讨论】:

  • 我认为您的 xLeft 和 yTop 值可能有误,请尝试以下我在答案中发布的代码...

标签: android android-layout canvas bitmap


【解决方案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)

要理解这一点,您需要知道如何使用矩阵。基本上,您将位图(位图中的点实际上是一个矩阵)乘以您在此处创建的矩阵,然后它得到一个新矩阵,画布只是绘制新的矩阵。

【讨论】:

  • 感谢您提供详细信息。作为最后一步,我做canvas.drawBitmap(mBitmap, matrix, mFilledPaint);。但问题是位图是围绕某个外部中心绘制的,而不是它的中心,不是很多,而是足够引人注目。如果事实上它大约是位图长度的一半左右。我正在玩这个,但还没有多少运气。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-06
相关资源
最近更新 更多