Android位图变换中心的矩阵旋转
Android matrix rotation of bitmap change center
我遇到了 Bitmap
旋转的奇怪问题。
那是我的代码:
在onDraw
方法中
int cx_gear_big = (getWidth() - gear_big.getWidth()) >> 1;
int cy_gears_big = (getHeight() - gear_big.getHeight()) >> 1;
canvas.drawBitmap(rotateGear(gear_big, bigGearAngle), cx_gear_big,cy_gears_big, null);
这是我 returns 旋转的方法 Bitmap
:
public static Bitmap rotateGear(Bitmap source, int angle)
{
Matrix matrix = new Matrix();
matrix.postRotate(angle);
return Bitmap.createBitmap(source, 0, 0, source.getWidth(), source.getHeight(), matrix, true);
}
我的 canvas
中几乎没有齿轮,但这并不重要。
我的问题是:
当我旋转我的 Bitmap
(一个齿轮)时,它会向下和向左移动(这取决于旋转的角度)然后它会回来...
在这种情况下我的问题在哪里?
更新:
Bitmap
的翻译不是线性的。就像弹跳一样。
所以解决这个问题的理想方法是在旋转之前平移矩阵并将其平移回来。代码示例:
Matrix m = new Matrix();
float px = getWidth()/2;
float py = getHeight()/2;
m.postTranslate(-bitmap.getWidth()/2, -bitmap.getHeight()/2);
m.postRotate(angle);
m.postTranslate(px, py);
canvas.drawBitmap(bitmap, m, null);
只需使用此代码
matrix.setRotate(angle, bitmap.getWidth()/2, bitmap.getHeight()/2);
我遇到了 Bitmap
旋转的奇怪问题。
那是我的代码:
在onDraw
方法中
int cx_gear_big = (getWidth() - gear_big.getWidth()) >> 1;
int cy_gears_big = (getHeight() - gear_big.getHeight()) >> 1;
canvas.drawBitmap(rotateGear(gear_big, bigGearAngle), cx_gear_big,cy_gears_big, null);
这是我 returns 旋转的方法 Bitmap
:
public static Bitmap rotateGear(Bitmap source, int angle)
{
Matrix matrix = new Matrix();
matrix.postRotate(angle);
return Bitmap.createBitmap(source, 0, 0, source.getWidth(), source.getHeight(), matrix, true);
}
我的 canvas
中几乎没有齿轮,但这并不重要。
我的问题是:
当我旋转我的 Bitmap
(一个齿轮)时,它会向下和向左移动(这取决于旋转的角度)然后它会回来...
在这种情况下我的问题在哪里?
更新:
Bitmap
的翻译不是线性的。就像弹跳一样。
所以解决这个问题的理想方法是在旋转之前平移矩阵并将其平移回来。代码示例:
Matrix m = new Matrix();
float px = getWidth()/2;
float py = getHeight()/2;
m.postTranslate(-bitmap.getWidth()/2, -bitmap.getHeight()/2);
m.postRotate(angle);
m.postTranslate(px, py);
canvas.drawBitmap(bitmap, m, null);
只需使用此代码
matrix.setRotate(angle, bitmap.getWidth()/2, bitmap.getHeight()/2);