2

我正在为 Android 编写 LiveWallpaper,我希望有一个具有一定不透明度的位图来显示。

在我的 LiveWallpaper Engine 的构造函数中,我设置了一个稍后将在 Canvas 上使用的 Paint:

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

我在这个函数中绘制位图,使用mForeGroundPainton 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©;
    }
}

现在发生的事情是,一切似乎都运行良好,这意味着 Bitmap 的不透明度值为5,就像我设置的那样。

当我多次使用该函数时会出现问题,因为它是在 期间调用的:不透明度总和,每次调用.drawFrame()onOffsetsChanged()drawFrame()

我怎样才能防止这种情况发生,从而将不透明度保持在一个稳定的水平?

4

1 回答 1

4

Bitmap只是在旧的上重绘,所以你有 2秒Bitmap,5% 不透明度 = 10% 不透明度。尝试Canvas在. c.drawColor(...);_c.save();

于 2012-07-29T19:35:13.733 回答