有效地旋转位图android画布

时间:2013-11-09 20:23:43

标签: android canvas bitmap

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

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位图执行此操作时,它开始滞后。有没有什么办法解决这一问题?

1 个答案:

答案 0 :(得分: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();