android view viewgroup invalidate ondraw and draw

joshkendrick picture joshkendrick · Feb 21, 2013 · Viewed 8k times · Source

We're trying to write our own MapView, and I'm trying to figure out how adding overlays to the mapview causes them to get drawn in other mapping APIs

I've got a MapView that extends ViewGroup. I think I've figured out that calling MapView.invalidate() causes the mapview's dispatchDraw method to be called. Does that sound correct?

If that's true, when is the onDraw and draw method of the mapview called?

More importantly is all this view and which methods called when stuff documented well anywhere?

Thanks!

EDIT This SO post explained that for classes that extend ViewGroup, the onDraw method is not called automatically. You have to force it if you need it. But as ebarrenchea pointed out, the order is draw, onDraw, dispatchDraw IF all the methods are called

Answer

ebarrenechea picture ebarrenechea · Feb 21, 2013

Calling invalidate on your viewgroup will force draw to run which will in turn call onDraw and then dispatchDraw. You should have a look at the view documentation here and the View source code here for more information.