Cambiar el color sólido de la forma en el tiempo de ejecución dentro del xml Drawable utilizado como fondo

Tengo un archivo xml Drawable (background.xml):

    ...........         

utilizado por LinearLayout:

   

Ahora necesito cambiar la forma del color sólido de shape_id en el tiempo de ejecución en función de algunas condiciones. ¿Como hacer esto?

Encontrado por mí:

  View v = findViewById(R.id.layout_id); LayerDrawable bgDrawable = (LayerDrawable)v.getBackground(); final GradientDrawable shape = (GradientDrawable) bgDrawable.findDrawableByLayerId(R.id.shape_id); shape.setColor(----);