ItemDecoration e ItemAnimator

Los componentes ItemDecoration e ItemAnimator surgen por el componente RecyclerView que es un nuevo widget de Android 5.0 con una versión más avanzada y flexible del ListView y GridView y así evitar el uso frecuente del findViewById y reutilizar recursos.  El RecyclerView permite mostrar muchos datos juntos por lo que es muy eficaz para cuando navegamos por los datos en la aplicación con el scroll, por lo cual mantiene un número limitado de vistas en la pantalla.

El API de RecyclerView está compuesto de componentes internos, el Adapter, ViewHolder, LayoutManager, ItemDecoration e ItemAnimator.

La clase Adapter es la encargada de crear las Views que sean necesarias para cada elemento del RecyclerView donde se le puede aplicar el patrón de diseño ViewHolder, el LayoutManager es el encargado del aspecto visual es decir se encarga del layout de todas las vistas que contenga el RecyclerView y define como deseas  mostrar los elementos en la pantalla por ejemplo tipo listado LinearLayoutManager de forma horizontal o vertical, tabla tradicional GridLayoutManager o tabla apilada o celdas no alineadas StaggeredGridLayoutManager como también se puede crear un LayoutManager propio y así ver como se accederá a los elementos que se muestran en la pantalla de una manera muy flexible.

El componente ItemAnimator es el encargado de las animaciones de los elementos que sean eliminados, añadidos, movidos o modificados en el RecyclerView.

Por defecto el RecyclerView utiliza el DefaultItemAnimator que es una implementación que contiene animaciones básicas como por ejemplo las acciones de eliminar, añadir, mover o modificar los elementos en un RecyclerView, se le asigna al RecyclerView con el método setItemAnimator() además de cuando se realice cada acción sobre los datos se llamara a su método de notificación correspondiente para que pueda actualizarse como debe y ejecute la animación correspondiente. Por lo cual cuando se añade un elementos se utiliza notifyItemInserted() y la posición donde estará el nuevo elemento, cuando se actualize un datos se utiliza notifyItemChanged(), cuando se elimina un dato utilizamos notifyItemRemoved() y cuando se mueve de sitio se utiliza notifyItemMoved().

También se pueden utilizar subclases de ItemAnimator para hacer animaciones personalizadas para las acciones de los elementos del ViewHolder. Pero con los métodos dispatchAnimationFinished(ViewHolder) para cuando finalice la animación de un ViewHolder y con animateAppearance(), animateChange(), animatePersistence(),animateDisappearance() y otros más métodos.

Para más información sobre estos métodos del ItemAnimator: RecyclerView.ItemAnimator.html

 

El componente ItemDecoration es el encargado de cambiar visualmente cada elemento y personalizar el aspecto de un RecyclerView además de la distribución de los elementos en la pantalla sin modificar los parámetros del layout con separadores o divisores en una lista añadiendo relieves, límites de grupos, etc… y se le asigna al RecyclerView con el método setItemDecoration().

También se puede crear un ItemDecoration personalizado creando una clase que debe extender de la clase RecyclerView.ItemDecoration además de implementar sus propios métodos getItemOffsets() que es el encargado de añadir los límites de los elementos de la lista y onDraw() o onDrawOver() que se encarga de diseñar o pintar el elemento para personalizarlo.

Con ItemDecoration los elementos se visualizan en el orden que se añaden, antes las vistas de elementos (item views) en onDraw() y después los elementos (items) en onDrawOver() en el RecycleView.

Para más información sobre el ItemDecoration:  RecyclerView.ItemDecoration.html

 


Fuentes utilizadas:

androcode.es

www.sgoliver.net