私は 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()
どうすればそれを防ぎ、不透明度を安定したレベルに保つことができますか?