recyclerview itemanimator android scroll android-animation android-recyclerview

android - itemanimator - ¿Cómo animar recyclerview en scroll como Google Plus/Google Newsstand?



recyclerview animation (5)

¿Cómo animo RecyclerView cuando aparecen los elementos por primera vez y también cuando el usuario se desplaza, de la misma manera que funciona para la aplicación Google Plus o la aplicación Google News Stand?

También leí en alguna parte que RecyclerView no admite directamente la animación cuando el usuario se desplaza; Si esto es cierto, ¿hay alguna manera de que podamos hacerlo?


Lo hice de esta manera. Podría ayudar a alguien. No sé si es la mejor manera de hacerlo pero funciona bien para mí.

ACTUALIZACIÓN: para corregir el comportamiento de desplazamiento rápido, anule el método onViewDetachedFromWindow del adaptador y llame a clearAnimation en la vista animada (en este caso, holder.itemView.clearAnimation() ). Me gusta esto:

@Override public void onViewDetachedFromWindow(ViewHolder holder) { super.onViewDetachedFromWindow(holder); holder.itemView.clearAnimation(); }

up_from_bottom.xml

<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="@android:anim/decelerate_interpolator"> <translate android:fromXDelta="0%" android:toXDelta="0%" android:fromYDelta="100%" android:toYDelta="0%" android:duration="400" /> </set>

down_from_top.xml

<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="@android:anim/decelerate_interpolator"> <translate android:fromXDelta="0%" android:toXDelta="0%" android:fromYDelta="-100%" android:toYDelta="0%" android:duration="400" /> </set>

Y finalmente ponga este código en onBindViewHolder de recyclerView . Cree un campo llamado lastPosition e inicialícelo en -1.

Animation animation = AnimationUtils.loadAnimation(context, (position > lastPosition) ? R.anim.up_from_bottom : R.anim.down_from_top); holder.itemView.startAnimation(animation); lastPosition = position;


Para down_from_top.xml debería ser

<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="@android:anim/decelerate_interpolator"> <translate android:fromXDelta="0%" android:toXDelta="0%" android:fromYDelta="-100%" android:toYDelta="0%" android:duration="400" /> </set>


Sin ninguna biblioteca externa en RecycleView.Adapter en el método onBindViewHolder use la animación como en el ejemplo:

if (position>lastAnimatedPosition) { //set init transitionY to animate from it holder.itemView.setTranslationY(holder.itemView.getHeight()); //animate to orginal position holder.itemView.animate().translationYBy(- holder.itemView.getHeight()).start(); lastAnimatedPosition=position; }

El código anterior animará desde la parte inferior de cada fila en la lista. La animación se realizará solo una vez, pero onBindViewHolder se ejecuta en el desplazamiento, por lo que el primer desplazamiento de la lista se realizará con el efecto de animación.

Es muy importante inicializar la vista al inicio de la animación, por lo que en el ejemplo, establezco:

holder.itemView.setTranslationY( + Y change);

Luego la animación vuelve a su posición original:

holder.itemView.animate().translationYBy(- Y change).start();

Si necesitas alfa hazlo de esta manera:

holder.itemView.setAlpha(0); holder.itemView.animate().apha(1).start();



https://github.com/wasabeef/recyclerview-animators

En mi código hay algo como esto:

import jp.wasabeef.recyclerview.animators.adapters.AlphaInAnimationAdapter; .... public function populate() { // Get your recicleview rv = (RecyclerView)findViewById(R.id.rv); rv.setHasFixedSize(true); // Populate your cursor with your own method... Cursor myRecycleItems= null; myRecycleItems= mDbHelper.getItems(); //create your itemsAdapter= new ItemsAdapter(myRecycleItems, getApplicationContext()); //Finnaly apply your adapter to RV with AlphaInAnimationAdapter: rv.setAdapter(new AlphaInAnimationAdapter(itemsAdapter)); }

Necesitas añadir dependencias a tu gradle.

dependencies { // jCenter ...... your curent dependencies .... compile ''jp.wasabeef:recyclerview-animators:2.0.0'' }

Lea el formulario de documento https://github.com/wasabeef/recyclerview-animators para instalarlo.