如果多次调用,Paint.setAlpha()总结

时间:2012-07-29 19:28:39

标签: android bitmap android-canvas alpha live-wallpaper

我正在为Android编写一个LiveWallpaper,我想要一个具有一定不透明度的Bitmap来显示。

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

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©;
    }
}

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

问题在我drawFrame()函数多次使用时发生,因为它在onOffsetsChanged()期间调用:不透明度总和,使其为10,15每次拨打drawFrame()

如何防止这种情况发生,从而将不透明度保持在稳定水平?

1 个答案:

答案 0 :(得分:4)

Bitmap正在重绘旧版本,因此您有2 Bitmap s,5%不透明度= 10%不透明度。尝试在Canvas之后使用c.drawColor(...);(带背景颜色)清除c.save();