2012-07-29 2 views
2

Android 용 LiveWallpaper를 쓰고 있으며 표시 할 불투명도가있는 비트 맵을 만들고 싶습니다. drawBitmap()mForeGroundPaint를 사용하여,Paint.setAlpha()가 여러 번 호출 된 경우 합계가 나타납니다.

MyEngine() { 
    ... 
    mForeGroundPaint = new Paint(); 
    mForeGroundPaint.setAlpha(5); 
} 

내가이 함수에서 비트 맵을 그릴 :

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으로 그려져 있음을 의미합니다. 이 onOffsetsChanged() 동안 불리는 내가 drawFrame() 기능을 여러 번 것을 사용할 때

문제이 발생합니다 을 불투명도 만들고, 요약이 10, 15, 20, 25, ... drawFrame()의 모든 호출에.

어떻게 그런 일이 일어나지 않도록 방지하고 불투명도를 일정하게 유지할 수 있습니까?

답변

4

Bitmap은 오래된 것 위에 다시 그려 지므로, 5 % 불투명도 = 10 % 불투명도에서 2 Bitmap입니다. c.save(); 다음에 Canvasc.drawColor(...); (배경색으로)으로 지워보십시오.