【发布时间】:2012-07-27 13:48:23
【问题描述】:
我正在为 Android 编写一个 LiveWallpaper,我想要一个具有一定不透明度的位图来显示。
在我的 LiveWallpaper Engine 的构造函数中,我设置了一个稍后将在 Canvas 上使用的 Paint:
MyEngine() {
...
mForeGroundPaint = new Paint();
mForeGroundPaint.setAlpha(5);
}
我在这个函数中绘制位图,使用drawBitmap()上的mForeGroundPaint:
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() 期间被调用:不透明度总和,使其为 10、15、20、25 , ... 每次调用drawFrame()。
我怎样才能防止这种情况发生,从而将不透明度保持在一个稳定的水平?
【问题讨论】:
标签: android bitmap android-canvas alpha live-wallpaper