1

一連の画像を含むシンプルなライブ壁紙を開発したいと思います。必要な唯一のアニメーションは、各画像のフェードインとフェードアウトです。

私がオンラインで見つけた LWP のチュートリアルはすべて、Draw キャンバスを使用して派手なアニメーションや描画を行う方法を示しています。これは私のアプリには必要ありません。画像のコレクションを繰り返し処理したいだけです。

初心者のプログラマーである私は、画像の配列をループする方法と、それらを壁紙として表示する方法を学ぶ手助けが必要です。

誰かコードを共有したり、このための優れたチュートリアルを教えてもらえますか?

アップデート

LWP がデバイスに読み込まれますが、壁紙が変わりません。画像3、アイアンマンに貼ってあります

ここに私がこれまでに持っているコードがあります。draw() で何か間違ったことをしていると思います

public class Wallpaper extends WallpaperService {
public void onCreate() {
    super.onCreate();
}

public void onDestroy() {
    super.onDestroy();
}

public Engine onCreateEngine() {
    return new CercleEngine();
}

class CercleEngine extends Engine {

    private final Handler handler = new Handler();
    private final Runnable drawRunner = new Runnable() {
        @Override
        public void run() {
            draw();
        }
    };
    private boolean visible = true;
    public Bitmap image1, image2, image3;

    CercleEngine() {
        image1 = BitmapFactory.decodeResource(getResources(),
                R.drawable.batman);
        image2 = BitmapFactory.decodeResource(getResources(),
                R.drawable.captainamerica);
        image3 = BitmapFactory.decodeResource(getResources(),
                R.drawable.ironman);
    }


    public void onCreate(SurfaceHolder surfaceHolder) {
        super.onCreate(surfaceHolder);
    }

    @Override
    public void onVisibilityChanged(boolean visible) {
        this.visible = visible;
        if (visible) {
            handler.post(drawRunner);
        } else {
            handler.removeCallbacks(drawRunner);
        }
    }

    @Override
    public void onSurfaceDestroyed(SurfaceHolder holder) {
        super.onSurfaceDestroyed(holder);
        this.visible = false;
        handler.removeCallbacks(drawRunner);
    }

    public void onOffsetsChanged(float xOffset, float yOffset, float xStep,
            float yStep, int xPixels, int yPixels) {
        draw();
    }

    void draw() {
        final SurfaceHolder holder = getSurfaceHolder();

        Canvas c = null;
        try {
            c = holder.lockCanvas();
            if (c != null) {
                c.drawBitmap(image1, 0, 0, null);
                c.drawBitmap(image2, 0, 0, null);
                c.drawBitmap(image3, 0, 0, null);
            }
        } finally {
            if (c != null)
                holder.unlockCanvasAndPost(c);
        }

        handler.removeCallbacks(drawRunner);
        if (visible) 
        {
           handler.postDelayed(drawRunner, 1000); // delay 1 sec
        }

    }
}
4

1 に答える 1

1

画像の配列をループする簡単な方法はありません。手動で行う必要があります。

採用できるアプローチの 1 つは、画像を /res/drawable に保持し、int[] 配列を使用して画像の resid を保存し、それをループすることです。

ライブ壁紙について詳しく説明されたチュートリアルがここにあります: http://www.vogella.com/articles/AndroidLiveWallpaper/article.html

幸運を

于 2012-07-03T12:28:10.580 に答える