Thanks for the hint!  Work's perfectly.

         paint.setXfermode(new PorterDuffXfermode(Mode.CLEAR));
        canvas.drawPaint(paint);


On Monday, November 26, 2012 11:31:12 AM UTC+11, Romain Guy (Google) wrote:
>
> Surfaces are double (or even triple) buffered. You are indeed not getting 
> in your canvas what's currently on screen but what was on screen a frame 
> ago. The easiest way to clear the surface is to call canvas.drawColor(0, 
> PorterDuff.Mode.CLEAR) (you can also use 0xff000000, PorterDuff.Mode.SRC).
>
>
> On Sun, Nov 25, 2012 at 3:42 PM, Johan <[email protected] <javascript:>
> > wrote:
>
>> I have some strange behaviour when repainting the screen with my live 
>> wallpaper.  I'm scaling an image and drawing it to the screen, but on each 
>> draw (as the image is scaled smaller than the previous draw), I can still 
>> see the previous image below the new image.
>> How do I clear the previous image out so that only the new scaled image 
>> is displayed?
>>
>> This is my code:
>>
>> private final Runnable mDraw = new Runnable() {
>>             public void run() {
>>                 draw();
>>             }
>>         };
>>
>>         void draw() {
>>         SurfaceHolder holder = getSurfaceHolder();
>>  Canvas canvas = null;
>> try {
>> canvas = holder.lockCanvas();
>>  if(canvas != null) {
>> this.paintScreen(canvas);
>> }
>>  }finally {
>> if(canvas != null) {
>> holder.unlockCanvasAndPost(canvas);
>>  }
>> }
>> mHandler.removeCallbacks(mDraw);
>> if (mVisible) {
>>  mHandler.postDelayed(mDraw, 60000);
>> }
>>         }
>>
>> Every minute my paintSurface function scales a bitmap (image loaded from 
>> resources), then uses canvas.drawBitmap to put the image on the screen.  As 
>> I understand from the documentation, holde.lockCanvas()is not supposed to 
>> contain the image currently on the screen and every pixel has to be 
>> drawn... this doesn't seem to be the case since the previous pixels are 
>> obviously under the new pixels.
>>
>> Thanks,
>> J
>> (26 Sept '12 - 10:45 AM)
>>
>> -- 
>> You received this message because you are subscribed to the Google
>> Groups "Android Developers" group.
>> To post to this group, send email to 
>> [email protected]<javascript:>
>> To unsubscribe from this group, send email to
>> [email protected] <javascript:>
>> For more options, visit this group at
>> http://groups.google.com/group/android-developers?hl=en
>
>
>
>
> -- 
> Romain Guy
> Android framework engineer
> [email protected] <javascript:>
>
>  

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to