Primero tienes que hacer que el Activity sea transparente, se hace creando un Theme con la siguiente configuración (es un Style que su parent es el Theme que te interesa, yo uso el Theme.AppCompat porque siempre uso ActionBarCompat):
<item name="android:windowFrame">@null</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowContentOverlay">@null</item>
Después tienes que asignar ese Theme a la Activity en el AndroidManifest:
android:theme="@style/EL_NOMBRE_QUE_LE_PONGAS"
Y ahora por último el código, en el "onStart" haces INVISIBLE el Layout principal de la Activity, muestras un ProgressDialog, y EN UN HILO INDEPENDIENTE (un AsyncTask es lo mejor) haces todo el proceso de carga que necesitas en el "doInBackground" , finalmente en el "onPostExecute" asignas todo lo que has cargado a las Views, quitas el ProgressDialog y haces VISIBLE el Layout.
Así lo hago yo en una aplicación que lo que hace es mostrarte una foto a pantalla completa desde un Thumbnail, mientras se la descarga aparece el ProgressDialog, cuando está descargada la asigna y la muestra.
EDITADO: Se me había colado el windowActionBarOverlay, que no es necesario en este caso.