0

私はいくつかのビットマップでライブ壁紙に取り組んでいます。ビットマップは連続的に回転します。これは、1 つのビットマップを回転させる方法です。

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++;}

これは 1 つのビットマップでは問題なく機能しますが、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 に答える