Swipe to refresh

Según la documentación de Google sobre Material Design

Swipe to refresh es un gesto de deslizamiento que está disponible al comienzo de la listas, grids y colecciones de cards donde aparece el contenido más reciente.

¿Cómo se utiliza?

I. En tu archivo build.gradle añade la última versión de la librería support-v4.

dependencies {  
    compile 'com.android.support:support-v4:X.X.X' 
    // X.X.X especifica la versión
}

II. Añade la vista al fichero de layout. Normalmente se utiliza para refrescar listas, pero podrás usarlo tal como lo necesites.

<android.support.v4.widget.SwipeRefreshLayout  
    android:id="@+id/activity_main_swipe_refresh_layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <ListView
        android:id="@+id/activity_main_listview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</android.support.v4.widget.SwipeRefreshLayout>  

III. Controla los eventos en la activity para realizar el refresco de datos con una instancia de SwipeRefreshLayout.OnRefreshListener.

SwipeRefreshLayout swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.activity_main_swipe_refresh_layout);

swipeRefreshLayout.setOnRefreshListener(new     SwipeRefreshLayout.OnRefreshListener() {  
        @Override
        public void onRefresh() {
            refreshData();
        }
});

IV. Por último, cuando quieras cancelar la animación de la vista del solo tienes que utilizar el método setRefreshing con valor a false.

swipeRefreshLayout.setRefreshing(false);  

¿Cómo se personaliza?

Podemos personalizar la apariencia de la vista. Si queremos definir nuestra propia gama de colores para el icono de progreso animado, utilizaremos el método setColorSchemeResources().

I. Primero definiremos los colores que queremos que aparezcan:

<resources>  
    <color name="pink">#FF4081</color>
    <color name="indigo">#3F51B5</color>
    <color name="lime">#CDDC39</color>
</resources>  

II. Luego deberás asignar los colores al SwipeRefreshLayout con el método setColorSchemeResources.

swipeRefreshLayout.setColorSchemeResources(  
    R.color.pink, R.color.indigo, R.color.lime);