2012-07-29 23 views
2

我正在爲Android寫一個LiveWallpaper,我想要一個具有一定不透明度的Bitmap來顯示。Paint.setAlpha()總結,如果多次調用

在我LiveWallpaper引擎的構造我設置,我稍後會用我的畫布塗料:

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()每次呼叫。

如何防止發生這種情況,從而將不透明度的數量保持在穩定的水平上?

回答

4

Bitmap剛剛被重新繪製,因此您有2 Bitmap s在5%不透明度= 10%不透明度。嘗試在c.save();之後用c.drawColor(...);(使用背景顏色)清除Canvas