Android矩阵旋转位图更改中心

时间:2015-01-22 19:08:49

标签: android bitmap rotation android-canvas ondraw

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);

这是我的方法,它返回旋转的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(一个齿轮)时,它会向下移动(它取决于旋转角度)然后它会回来...... 在这种情况下我的问题在哪里?

UPD: Bitmap的翻译不是线性的。就像弹跳一样。

2 个答案:

答案 0 :(得分:1)

解决这个问题的理想方法是在旋转前翻译矩阵并将其翻译回来。代码示例:

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);

答案 1 :(得分:0)

只需使用此代码

matrix.setRotate(angle, bitmap.getWidth()/2, bitmap.getHeight()/2);