web-dev-qa-db-fra.com

Comment faire défiler recyclerView par programme?

J'ai un recyclerView horizontal. Lorsque je lance l'activité pour la première fois, je souhaite faire défiler tous les éléments de recyclerview vers le bas (à droite dans ce cas) et vers le haut (à gauche). Un peu comme une animation. Le comportement de défilement doit être visible pour l'utilisateur.

J'ai essayé de le faire comme:

Animation slideRight = AnimationUtils.loadAnimation(this, R.anim.slide_right);
        Animation slideLeft = AnimationUtils.loadAnimation(this, R.anim.slide_left);
        slideRight.setDuration(1000);
        slideLeft.setDuration(1000);
        slideRight.setAnimationListener(new Animation.AnimationListener() {
            @Override
            public void onAnimationStart(Animation animation) {

            }

            @Override
            public void onAnimationEnd(Animation animation) {
                recyclerView.startAnimation(slideLeft);
            }

            @Override
            public void onAnimationRepeat(Animation animation) {

            }
        });
        recyclerView.startAnimation(slideRight);

diapo animée à gauche:

<set xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:shareInterpolator="false" >

    <translate
        Android:duration="200"
        Android:fromXDelta="-100%"
        Android:fromYDelta="0%"
        Android:toXDelta="0%"
        Android:toYDelta="0%" />

</set>

diapo animée à droite:

<translate
    Android:duration="200"
    Android:fromXDelta="100%"
    Android:fromYDelta="0%"
    Android:toXDelta="0%"
    Android:toYDelta="0%" />

cela fonctionne mais cela glisse simplement la vue de recyclage dans son ensemble, je veux juste faire défiler (glisser) les éléments. Comment puis-je faire ceci?

7
Ege Kuzubasioglu

Vous pouvez utiliser scrollTo()

  recyclerView.post(new Runnable() {
        @Override
        public void run() {
            recyclerView.scrollToPosition(adapter.getItemCount() - 1);
            // Here adapter.getItemCount()== child count
        }
    });

Ou smoothScrollToPosition().

recyclerView.post(new Runnable() {
        @Override
        public void run() {
            recyclerView.smoothScrollToPosition(adapter.getItemCount() - 1);
        }
    });

Pour remonter, vous devez appeler la méthode ci-dessus avec l'index 0. Mais tout d'abord, vous devez vous assurer que la variable RecyalerView défile jusqu'à la fin. Donc, mettez une ScrollListener sur RecyclerView pour vous assurer que le dernier élément est visible. 

9
ADM

Utilisez ceci.. 

 int top = 0;
 recyclerView.smoothScrollToPosition(top); // for top

 int bottom = recyclerView.getAdapter().getItemCount()-1;
 recyclerView.smoothScrollToPosition(bottom);
0
Santanu Sur