2

私の問題はおそらく本当に単純です。私は最近、Android 用のライブ壁紙の作成 (および一般的な Android コーディング) を始めましたが、見つけるのが本当に難しいため、ライブ壁紙コーディングの背後にある基本が不足しています。

2 つ (またはそれ以上) の「レイヤー」を持つライブ壁紙を作成したいと思います。私の2つのいわゆるレイヤーは次のとおりです。

  • タッチイベントに反応する背景
  • 一番上にあるビットマップ

現時点では、次のような単一のキャンバスにすべてを描画しています。

Resources res = getResources();
Bitmap image = BitmapFactory.decodeResource(res, R.drawable.image);

        Canvas c = null;
        try {
            c = holder.lockCanvas();
            if (c != null) {
                c.drawARGB(aa, rr, gg, bb);
                c.drawBitmap(image, 0, 0, paint);
            }
        } finally {
            if (c != null) holder.unlockCanvasAndPost(c);
        }

動作しますが、各フレームの再描画でこの比較的大きな PNG ファイルを描画しているため、パフォーマンスは非常に悪いです。

ライブ壁紙でビットマップを表示する最良の方法を教えてください。後でそれらをアニメーション化する方法(基本的には開始位置を変更するだけ)と同様に、毎回再描画する必要はありませんか?最後に、ライブ壁紙で z-index (複数のレイヤーを持つ) を決定する方法 - これは「通常のアプリ」のように XML でも実行できますか?

4

1 に答える 1

0

今日、キャンバスと別のアニメーション スレッドを使用するライブ壁紙テンプレートを GitHub に投稿しました。ライブ壁紙を始めたばかりの場合は、ぜひチェックしてみてください。

あなたの場合、ビットマップを一度だけデコードしてから、単純に描画する必要があります。フレームごとにビットマップを再描画しても問題はありません。複数のレイヤーが必要な場合は、それらを順番に描画して、一番上のレイヤーが最後に描画されるようにします。

于 2013-09-09T15:06:27.497 に答える