Повернуть растровое изображение (больше, чем холст), но по центру холста - PullRequest
2 голосов
/ 25 сентября 2010

Я пытаюсь повернуть растровое изображение (которое больше, чем у Canvas), сохраняя его по центру с Canvas и многократно по времени, чтобы оно выглядело как вращающееся. Я хотел опубликовать изображение, объясняющее ситуацию, но я не могу (недостаточно репутации; это жалко, потому что я потратил много времени на это :(). В любом случае, я надеюсь, вы понимаете, в чем проблема.

Поскольку я не хочу, чтобы остальные рисованные элементы, нарисованные на холсте, также вращались, я не могу использовать Canvas.rotate (). Итак, я попробовал все различные комбинации, используя матрицу и рисуя растровое изображение на холсте, используя смещение, например:

Matrix matrix = new Matrix();
matrix.postRotate(degree); //degree is increasing with time
mrotatedbackground = CreateBitmap(mbackground, (mbackground.getWidth()-screenwidth)/2, (mbackground.screenHeight()-screenheight)/2, screenwidth, screenheight, matrix, true); 
canvas.drawBitmap(mrotatedbackground, -screenwidth/2, -screenheight/2, paint); 

1 Ответ

1 голос
/ 31 мая 2011

Да, вы можете использовать Canvas.rotate ():

onDraw(Canvas c) {
    c.save();
    c.rotate(some_angle);
    c.drawBitmap(...);
    c.restore();
}

Canvas.save () сохраняет копию текущей трансформации и восстанавливает ее при вызове Canvas.restore ().

Обратите внимание, что вы можете иметь несколько вложенных вызовов Canvas.save (), для каждого из них вам потребуется вызвать Canvas.restore ().

...