RECYCLERVIEW: ITEMANIMATOR

Los RecycletView soportan animaciones para sus ítems, estas animaciones pueden dispararse en cualquier momento ya sea porque se ha creado un nuevo ítem, se ha eliminado, seleccionado o movido. Para esto utilizaremos los ItemAnumator, una clase de android que nos permite utilizar e incluso modificar las animaciones.

Por defecto, podemos utilizar DefaultItemAnimator con nuestros RecyclerView sin tener que modificar nada. Si queremos podemos crear nuestras propias animaciones o utilizar algunas de las muchas que existen y son libres como las que ponen a nuestra disposición programadores como Daichi Furiya en este repositorio de GitHub.

Con ayuda del adaptador informaremos a android de los cambios que haya en la colección de datos con la que estamos trabajando, lo que disparará la animación. Aunque antes se utilizaba el método notifyDataSetChanged(), lo que provocaba que todos los ítems se dibujaran de nuevo, con su consecuente consumo de recursos. En las versiones más actuales de android se utilizan métodos más concretos, que afectan son a uno de los ítems, algunos de los más utilizados son:

Hay muchos más y podemos utilizarnos como mejor nos convenga o modificarlos para darles el aspecto que prefiramos.

Ejemplo

Para el ejemplo, vamos a agregar un FloatingActionButton que irá añadiendo un país a la vez a nuestra lista para que podamos ver la animación que se produce. Para este caso utilizaremos la animación del defaultitemAnimator.

Lo primero que haremos será añadir el soporte para el botón en el build.gradle.

compile 'com.android.support:design:23.0.1'

Ahora modificaremos el layout de la activity para añadirlo.

<android.support.design.widget.FloatingActionButton
    android:id="@+id/fbAgregar"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@android:drawable/ic_input_add"
    android:clickable="true"
    android:layout_gravity="right"
    />


<android.support.v7.widget.RecyclerView
    android:id="@+id/rvPaises"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

</android.support.v7.widget.RecyclerView>

Lo siguiente que modificaremos será nuestro adapter. Yo voy a agregar un método para agregar un nuevo objeto de tipo Pais al adaptador y para llamar al método notifyItemInserted() que será el encargado de activar la animación.

public void addItem(Pais p){

    paises.add(p);

    notifyItemInserted(paises.size());
}

Por ultimo, en el onCreate del MainActivity le pasaremos al adaptador un array vacío y en el onClick() del botón flotante, llamaremos al método que creamos en el adaptador y le iremos pasando cada vez un objeto de Pais de los que hemos obtenido con el parser.

rvPaises = (RecyclerView) findViewById(R.id.rvPaises);

final CountryAdapter adaptador = new CountryAdapter(new ArrayList<Pais>());

rvPaises.setAdapter(adaptador);

rvPaises.setLayoutManager(new GridLayoutManager(this, 3));

rvPaises.setItemAnimator(new DefaultItemAnimator());

fbAgregar = (android.support.design.widget.FloatingActionButton) findViewById(R.id.fbAgregar);
fbAgregar.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {

        adaptador.addItem(paises.get(contador));

        contador++;
    }
});

El resultado debería ser el que se ve en el video.

RECYCLERVIEW: ITEMANIMATOR

Deja un comentario