webentwicklung-frage-antwort-db.com.de

Wie kann ich recyclerView programmgesteuert scrollen?

Ich habe eine horizontale RecyclerView-Ansicht. Wenn ich die Aktivität zum ersten Mal öffne, möchte ich, dass alle Elemente im Recycler nach unten (nach rechts in diesem Fall) und zurück nach oben (nach links) gescrollt werden. Irgendwie eine Animation. Das Bildlaufverhalten sollte für den Benutzer sichtbar sein.

Ich versuchte es so zu machen:

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);

anim Folie links:

<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>

anim Slide rechts:

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

es funktioniert zwar, aber es wird nur die Recyclingübersicht als Ganzes angezeigt. Ich möchte nur die Elemente scrollen. Wie kann ich das machen?

7

Sie können scrollTo() verwenden.

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

Oder smoothScrollToPosition().

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

Um wieder nach oben zu gelangen, müssen Sie die obige Methode mit dem Index 0 aufrufen. Zuerst müssen Sie jedoch sicherstellen, dass die Variable RecyalerView als letztes gescrollt wird. Setzen Sie also eine ScrollListener auf RecyclerView, um sicherzustellen, dass das letzte Element sichtbar ist. 

9
ADM

wenn Sie zum Beispiel einen Eintrag aus der Recyclingübersicht in die Mitte des Bildschirms scrollen müssen. erweitere deinen Gegenstand - benutze diesen Weg:

in app/build.gradle - einfügen:

 implementation 'com.andkulikov:transitionseverywhere:1.7.4'

wenn Sie auf BindViewHolder des Adapters klicken, fügen Sie Folgendes ein:

AutoTransition transitionPort = new AutoTransition();
                transitionPort.setDuration(100);
                transitionPort.addListener(new Transition.TransitionListener() {
                    @Override
                    public void onTransitionStart(@NonNull Transition transition) {
                        recyclerView.setEnabled(false);
                        recyclerView.setClickable(false);
                    }

                    @Override
                    public void onTransitionEnd(@NonNull Transition transition) {
                        recyclerView.post(() -> recyclerView.smoothScrollToPosition(position));
                        recyclerView.setEnabled(true);
                        recyclerView.setClickable(true);
                    }

                    @Override
                    public void onTransitionCancel(@NonNull Transition transition) {
                        recyclerView.setEnabled(true);
                        recyclerView.setClickable(true);
                    }

                    @Override
                    public void onTransitionPause(@NonNull Transition transition) {

                    }

                    @Override
                    public void onTransitionResume(@NonNull Transition transition) {

                    }
                });
                TransitionManager.beginDelayedTransition(recyclerView, transitionPort);
1

Benutze das.. 

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

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