【问题标题】:Paint.setAlpha() sums up, if called several timesPaint.setAlpha() 总结,如果多次调用
【发布时间】: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


    【解决方案1】:

    Bitmap 只是在旧的上重绘,所以你有 2 个Bitmaps,5% 不透明度 = 10% 不透明度。尝试在c.save(); 之后使用c.drawColor(...);(使用您的背景颜色)清除Canvas

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-06
      • 1970-01-01
      • 1970-01-01
      • 2021-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多