/ / Android: problema de desempenho do canvas.drawBitmap - android, desempenho, drawbitmap

Android: canvas.drawBitmap issue issue - android, desempenho, drawbitmap

Eu tive um problema ultimamente Android: rotação da imagem ao redor do centro que foi resolvido com a ajuda da Unconn.

No entanto, descobriu-se que a solução - assim como está funcionando - tem um desempenho muito pior do que o material RotateAnimation.

O que eu tenho até agora: 1) FrameLayout com dois ImageViews, um em cima do outro 2) SensorEventHandler, que move a vista inferior de acordo com o rumo medido. Isso funciona aceitável se eu usar RotateAnimation

Eu queria acelerar e suavizar oanimação um pouco, mas falhou dramaticamente. Aqui está a solução atual: 1) SurfaceView com rosca separada, controlando o desenho das camadas 2) Sem executar o código abaixo, o thread pode atingir cerca de 50 fps. 3) Com o código abaixo a taxa de quadros cai para 5ps e menos, então não é mais algo muito suave ...

Aqui está o código:

mRadar: Bitmap mostrando um "radar", carregado do recurso anterior mHeading: O rumo atual obtido dos sensores em graus mRadarW, mRadarH: largura / altura inicial da imagem, determinada na criação

        Matrix m = new Matrix();
m.setRotate(mHeading, mRadarW/2, mRadarH/2);
Bitmap rotated_radar = Bitmap.createBitmap(mRadar, 0, 0, mRadarW, mRadarH, m, true);
canvas.drawBitmap(rotated_radar, (mRadarW - rotated_radar.getWidth())/2, (mRadarH - rotated_radar.getHeight())/2, null);
canvas.drawBitmap(mRadar, 0, 0, null);

É o material Matrix / drawBitmap conhecido por executarnão é tão bom, na verdade pior do que o RotateAnimation? Se não houver chance de usar isso: Que opções você poderia propor? Embora o RotateAnimation funcione por enquanto, eu precisaria compor uma imagem muito mais complexa, antes Eu teria que ir para RotateAnimation, então temo, vou perder novamente com drawBitmap e amigos ...

Oh, sinto falta do CALayers :)

Respostas:

2 para resposta № 1

Este é muito rápido:

canvas.save(); //save the position of the canvas
canvas.rotate(angle, X + (ballW / 2), Y + (ballH / 2)); //rotate the canvas
canvas.drawBitmap(ball, X, Y, null); //draw the ball on the rotated canvas
canvas.restore(); //"rotate" the canvas back so that it looks like the ball has rotated

Eu uso uma bela imagem png de 32 bits, portanto, não preciso de nenhum filtro ou pintura anti-alias ... que tipo de imagem você usa para este sprite?