0

我正在制作带有多个位图的动态壁纸。位图将连续旋转。这就是我旋转一个位图的方式:

public void onCreate(SurfaceHolder surfaceHolder) {
            super.onCreate(surfaceHolder);          
            planet_1 = BitmapFactory.decodeResource(getResources(),
                    R.drawable.planet_1);
}

void draw(){
                         Matrix m_planet1 = new Matrix();

                     m_planet1.setRotate(r_planet1++,
                                planet_1.getWidth() / 2,
                                planet_1.getHeight() / 2);
                        m_planet1.postTranslate(
                                c.getWidth() / 2 - planet_1.getWidth() / 2,
                                c.getHeight() - planet_1.getHeight());

                        c.drawBitmap(planet_1, m_planet1, p1);
                        r_planet1 = r_planet1++;}

这适用于一个位图,但我希望有超过 10 个位图以不同的速度旋转。当我为 10 个位图执行此操作时,它开始滞后。有没有什么办法解决这一问题?

4

1 回答 1

0

您可以像这样使用硬件加速的 SurfaceView:

在清单中,将其添加到您的应用程序部分:

android:hardwareAccelerated="true"

在 onCreate 中,执行以下操作:

setWillNotDraw(false); // Turns on drawing for SurfaceView, disabled by default

然后,在 onDraw 中:

protected void onDraw(Canvas c) {
        ...do you drawing...

        invalidate(); // Triggers redraw
}

此外,不要旋转每个行星,而是尝试移动画布,这通常更简单,也可能更快。

c.save();
c.translate(centerOfPlanetX, centerOfPlanetY);
c.rotate(numDegrees);
c.drawBitmap(.....);
c.restore();
于 2013-11-09T21:21:32.683 回答