Drawing on Canvas outside the onDraw() method

android, canvas, ondraw

Solution

You mustn't take the reference to the Canvas passed, as it is only valid during the `onDraw(Canvas)` method call.

I recommend reading http://developer.android.com/guide/topics/graphics/2d-graphics.html#draw-with-canvas thoroughly, the possible ways are explained there quite well:

- To the Canvas provided to the `onDraw(Canvas)` method, during this method call. This is done in the UI thread, so nothing complicated should be attempted here

- To a Canvas you created yourself. This could be useful for preparing a bitmap in another thread and then drawing the bitmap to the Canvas given to `onDraw(Canvas)` method

- Using a SurfaceView, and obtaining a Canvas object from it with `lockCanvas()` method.

Problem

Here's my OnDraw() method ``` void onDraw(Canvas canvas) { mCanvas = canvas; //invalidate(); int x = 0; Iterator<Letter> it = mNextUpQueue.iterator(); while(it.hasNext()){ mCanvas.drawBitmap(it.next().getNext(), mNextUpCoordinates.get(x).x, mNextUpCoordinates.get(x).y, mPaint); mCanvas.drawBitmap(mAvailableLetters.get(x).getNotPressed(), mAvailableLettersCoordinates.get(x).x, mAvailableLettersCoordinates.get(x).y, mPaint); x++; } } ``` I have set canvas to a global variable mCanvas. But if I try to paint on mCanvas from outside the onDraw() method I get an error. Is it because I'm doing something wrong or the canvas must always be used from within the onDraw method?

Original source