Thanks, yea I set everything in an init function, outside of the main draw function (that puts everything on screen). Learned a lesson there when setting too many things I ran out of memory (I set my emulator for only 512MB to help me make sure I'm aware of memory usage in my app).
Thanks for all your great help! On Monday, November 26, 2012 12:53:20 PM UTC+11, Romain Guy (Google) wrote: > > You should avoid creating a new paint every time though, which is why I > mentioned the drawColor() alternative. > > > On Sun, Nov 25, 2012 at 4:57 PM, Johan <[email protected] <javascript:> > > wrote: > >> 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]> 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 android-d...@**googlegroups.com >>>> To unsubscribe from this group, send email to >>>> android-developers+**[email protected] >>>> For more options, visit this group at >>>> http://groups.google.com/**group/android-developers?hl=en<http://groups.google.com/group/android-developers?hl=en> >>> >>> >>> >>> >>> -- >>> Romain Guy >>> Android framework engineer >>> [email protected] >>> >>> -- >> 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

