Android: rotação da imagem ao redor do centro
Estou tentando girar uma imagem ao redor do centro. Isso geralmente funciona usando RotateAnimation, mas eu quero tê-lo um pouco mais rápido. Agora estou usando o padrão SurfaceView com uma linha de desenho separada.
Este é o código, que desenha o bitmap corretamente (dependendo do "cabeçalho" externo)
cabeçalho = ângulo em graus, bitmap = o bitmap, w = largura do bitmap, h = altura do bitmap.
Matrix m = new Matrix();
m.preRotate(heading, w/2, h/2);
m.setTranslate(50,50);
canvas.drawBitmap(bitmap, m, null);
Desvantagem: a imagem é um círculo e o código acima produz efeitos de aliasing visíveis ...
O código abaixo também está girando a imagem, mas enquanto gira (digamos de 0 a 45 graus no sentido horário), o centro da nova imagem se move para baixo / para a direita. Suponho que o efeito excêntrico se deva à largura / altura ampliada da nova imagem? No entanto, esse código não produz alias, se filter = true estiver definido. Existe uma maneira de usar o código nº 1, mas ter um tipo de anti-aliasing ou usar o código nº 2, mas livrar-se do movimento central?
Matrix m = new Matrix();
m.preRotate(heading, w/2, h/2);
m.setTranslate(50,50);
Bitmap rbmp = Bitmap.createBitmap(bitmap, 0, 0, w, h, m, true);
canvas.drawBitmap(rbmp, 50, 50, null);
UPDATE: Como resultado da discussão neste tópico, a versão correta do código # 2 (anti-aliasinge rotação correta) ficaria assim (deslocamento de 50,50 omitido):
Matrix m = new Matrix();
m.setRotate(heading, w/2, h/2);
Bitmap rbpm = Bitmap.createBitmap(bitmap, 0, 0, w, h, m, true);
canvas.drawBitmap(rbpm, (w - rbpm.getWidth())/2, (h - rbpm.getHeight())/2, null);
Obrigado.