1

私のライブ壁紙は、ほとんどの場合、ホーム画面の変更時にスムーズにスライドしません。背景の位置を複雑にコーディングする必要はありません。onoffsetschanged メソッドにある xpixles を使用して、壁紙の x 位置を調整するだけです。日の出ライブ壁紙アプリと同じようにスライドすることもあります。しかし、それ以外のほとんどの場合はスライドします.. それを説明する方法はわかりませんが、静的な鋭い動きのようです. その人たちについて何か考えはありますか。よろしくお願いします。

private void drawS() {
        final SurfaceHolder holder = getSurfaceHolder();        
        canvas = null;
        try {
            canvas = holder.lockCanvas();

            if (canvas != null) {

                background = BitmapFactory.decodeResource(getResources(),
                        R.drawable.background);         
                canvas.drawBitmap(background, mXPixels, mYPixels, null);

            }

        }
        finally {
            if (canvas != null) {
                holder.unlockCanvasAndPost(canvas);
            }
        }


        handler.removeCallbacks(runnableS);

        if (visible) {

            handler.postDelayed(runnableS, 25);
        }
    }
4

2 に答える 2

2

描画ルーチンでのリソースの作成を避けるようにしてください。これを drawS() 関数から削除します。

background = BitmapFactory.decodeResource(getResources(),
                    R.drawable.background);      

あなたのものを初期化する場所にそれを置き、後で背景のビットマップへの参照を使用するだけです。

logcat を見ると、drawS(); を呼び出すたびに、リソースのシャッフルとメモリ管理 (リソースへのメモリの割り当て、リソース内のビットマップ イメージのデコードなど) が行われていることがわかります。つまり、背景を描くたびに...

乾杯、

イヴィツァ

于 2012-05-14T12:33:59.390 に答える
0

私は同じ問題に遭遇し、Ivica の提案に従って解決しました。サーフェス作成サブ内のビットマップ作成行を移動しました。

public void onSurfaceCreated(SurfaceHolder holder) {
   super.onSurfaceCreated(holder);
   mybackground = BitmapFactory.decodeResource(getResources(), R.drawable.mybg);
 }

このように滑りはとても滑らかです

于 2012-08-29T15:00:49.117 に答える