我正在为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()
。
如何防止这种情况发生,从而将不透明度保持在稳定水平?
答案 0 :(得分:4)
Bitmap
正在重绘旧版本,因此您有2 Bitmap
s,5%不透明度= 10%不透明度。尝试在Canvas
之后使用c.drawColor(...);
(带背景颜色)清除c.save();
。