2

私は Android 用の LiveWallpaper を作成しています。表示する不透明度が一定のビットマップが必要です。

LiveWallpaper Engine のコンストラクターで、後で Canvas で使用する Paint を設定します。

MyEngine() {
    ...
    mForeGroundPaint = new Paint();
    mForeGroundPaint.setAlpha(5);
}

を使用して、この関数でビットマップを描画しmForeGroundPaintますdrawBitmap()

void drawFrame() {
    final SurfaceHolder holder = getSurfaceHolder();
    Canvas c = null;
    try {
        c = holder.lockCanvas();
        if (c != null) {
            c.save();
            /* allows the wallpaper to scroll through the homescreens */
            c.drawBitmap(wpBitmap, screenWidth * -mOffset, 0,
                    mForeGroundPaint);
            c.restore();
        }
    } finally {
        if (c != null)
                 holder.unlockCanvasAndPost©;
    }
}

ここで何が起こるかというと、すべてが正常に動作しているように見えます。つまり、5設定したように、ビットマップが の不透明度値でペイントされているということです。

の間に呼び出されるように、その関数を数回使用すると問題が発生しますdrawFrame()onOffsetsChanged()drawFrame()

どうすればそれを防ぎ、不透明度を安定したレベルに保つことができますか?

4

1 に答える 1

4

Bitmap古いものの上に再描画されているだけなので、Bitmap不透明度 5% = 不透明度 10% の 2 秒があります。の後に (背景色で) をクリアしてみてCanvasください。c.drawColor(...);c.save();

于 2012-07-29T19:35:13.733 に答える