1

我最近遇到了一个问题Android:图像围绕中心旋转,这在 Unconn 的帮助下得到了解决。

然而,事实证明,该解决方案 - 以及它正在工作 - 的性能确实比 RotateAnimation 的东西差得多。

到目前为止我所拥有的:1) FrameLayout 与两个 ImageViews,在彼此之上 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 :)

4

1 回答 1

2

这个非常快:

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 图像,因此不需要任何过滤器或抗锯齿画图......你为这个精灵使用什么样的图像?

于 2011-03-03T21:05:07.807 回答