我最近遇到了一个问题,Android: Rotation of image around the center由Unconn帮助解决。

但是,事实证明,与RotateAnimation相比,该解决方案(以及正在运行的)的性能确实差很多。

到目前为止,我有:
1)具有两个ImageView的FrameLayout,彼此叠置
2)SensorEventHandler,它根据测得的航向移动下视图。如果我使用RotateAnimation,这可以接受

我想加快速度并稍微平滑动画,但失败了。这是当前的解决方案:
1)具有单独线程的SurfaceView,控制图层的绘制
2)如果不执行下面的代码,该线程可能会达到50 fps。
3)在下面的代码下,帧速率下降到5ps或更小,因此不再是非常平滑的东西...

这是代码:

mRadar:显示“雷达”的位图,较早地从资源加载
mHeading:从传感器获取的当前航向,以度为单位
mRadarW,mRadarH:图像的初始宽度/高度,在创建时确定

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


是不是知道Matrix / drawBitmap东西的性能不是那么好,实际上比RotateAnimation差?
如果没有机会使用此功能:您可以提出哪些选择?尽管RotateAnimation暂时可以使用,但在不得不选择RotateAnimation之前,我需要组成一个更为复杂的图像,因此我担心,我将再次与drawBitmap和朋友一起放松...

哦,我想念CALayers :)

最佳答案

这个非常快:

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


我使用了不错的32位png图像,因此不需要任何滤镜或抗锯齿的Paint ...您将此精灵使用哪种图像?

关于android - Android:canvas.drawBitmap性能问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5186212/

10-08 23:26