我最近遇到了一个问题Android: Rotation of image around the center,这是在Unconn的帮助下解决的。
然而,事实证明,解决方案 - 以及它的工作 - 确实比RotateAnimation的东西有更糟糕的性能。
到目前为止我所拥有的: 1)带有两个ImageView的FrameLayout,彼此叠加 2)SensorEventHandler,根据测量的航向移动下部视图。如果我使用RotateAnimation
,这是可以接受的我想加快速度并平滑动画,但是失败了很多。这是当前的解决方案: 1)具有单独螺纹的SurfaceView,控制图层的绘制 2)如果不执行下面的代码,线程可以达到大约50 fps。 3)使用下面的代码,帧率降至5ps甚至更低,所以它不再是非常流畅的......
以下是代码:
mRadar:显示“雷达”的位图,从先前的ressource加载 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:)
答案 0 :(得分: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图像,因此不需要任何滤镜或反别名Paint ...你对这个精灵使用什么样的图像?