There is another solution to this, but I don't know if it's more efficient since it would require the SpriteBatch to be closed and opened again.

Idea: 
if the ShapeDrawables will only apear in the EngineView, we could moove all the implementation there, extending the drawChildren method, This would require the SpriteBatch to be closed before and opened after but will allow us to use the already computed matrixes(transform and projection) from the SpriteBatch and won't need iteration through all the components of the Stage nor extending Stage.